如何合并含重复键的两个DataFrame?将重复项转为字典列表列
解决方案:合并DataFrame并将多记录转为字典列表列
实现思路
- 先对动物数据(第二个DataFrame)做预处理:保留需要的字段(
id、inc、string_1、number1),按id分组后,把每组的每条记录转换成字典,再聚合为字典列表。 - 将处理后的动物数据与主人数据(第一个DataFrame)通过
id做左连接,把字典列表作为新列Animals添加进去。
完整代码示例
import pandas as pd # 创建第一个DataFrame(主人数据) df_owners = pd.DataFrame({ 'Timestamp': ['2022-11-28 21:28:20.793', '2022-11-28 21:28:20.793'], 'type': ['Owner', 'Owner'], 'id': [7249, 7250], 'Address': ['"8675 Jenny Lane, City, State, Zip"', '"309 Jenny Court, City, State, Zip"'] }) # 创建第二个DataFrame(动物数据) df_animals = pd.DataFrame({ 'Timestamp': ['2022-11-28 21:28:20.793']*5, 'type': ['Animal']*5, 'id': [7249,7249,7249,7249,7250], 'inc': [0,1,2,3,0], 'string_1': ['cat1','cat2','dog1','mouse1','mouse2'], 'number1': [3121435,3121435,3121558,3121559,3121435] }) # 处理动物数据:按id分组,生成字典列表 df_animals_processed = df_animals[['id', 'inc', 'string_1', 'number1']].groupby('id')\ .apply(lambda x: x.drop('id', axis=1).to_dict('records'))\ .reset_index(name='Animals') # 合并两个DataFrame result_df = pd.merge(df_owners, df_animals_processed, on='id', how='left') # 查看结果 print(result_df)
运行结果
Timestamp type id Address Animals 0 2022-11-28 21:28:20.793 Owner 7249 "8675 Jenny Lane, City, State, Zip" [{'inc': 0, 'string_1': 'cat1', 'number1': 3121435}, {'inc': 1, 'string_1': 'cat2', 'number1': 3121435}, {'inc': 2, 'string_1': 'dog1', 'number1': 3121558}, {'inc': 3, 'string_1': 'mouse1', 'number1': 3121559}] 1 2022-11-28 21:28:20.793 Owner 7250 "309 Jenny Court, City, State, Zip" [{'inc': 0, 'string_1': 'mouse2', 'number1': 3121435}]
补充说明
如果需要保留字典里的id字段,只需去掉处理代码中的drop('id', axis=1)即可,生成的字典会包含id键值对。
内容的提问来源于stack exchange,提问作者johnnyb
相关产品推荐
相关产品推荐

