首页 > 解决方案 > Pandas:将数据框的内容合并到单个列中(作为 dict / json 列表)

问题描述

我想将一个 df 的内容介绍给另一个,但作为基于 ID 的列表。我知道基于 ID 进行合并,但我不希望在新数据框中出现重复的 ID 行。我该怎么做?

data1 = {'ID': ['AB01','AB02'], 
    'Name': ["toyota", "honda"],
    'Age':[21,22]
   }
df1 = pd.DataFrame.from_dict(data1)
data2 = {'ID': ['AB01','AB01','AB03','AB03'], 
    'Type': ["C",np.nan,"X","S"],
    'Score':[87,98,45,82]
   }
df2 = pd.DataFrame.from_dict(data2)

输入数据帧

结果应该是这样的

在此处输入图像描述

标签: pythonpandasdataframenumpydata-manipulation

解决方案


尝试merge

print(df1.merge(df2, on='ID', how='left').groupby(['ID', 'Name', 'Age']).apply(lambda x: a.to_dict('records') if (a:=x[['ID']].join(x.iloc[:, 3:])).dropna().any().any() else []).reset_index(name='Info'))

输出:

     ID    Name  Age                                               Info
0  AB01  toyota   21  [{'ID': 'AB01', 'Type': 'C', 'Score': 87.0}, {...
1  AB02   honda   22                                                 []

推荐阅读