python - 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)
结果应该是这样的
解决方案
尝试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 []
推荐阅读
- r - 在闪亮的应用程序中使用 R Markdown .docx 模板
- r - R前向逐步回归中的多个最小模型
- python - def 函数中的额外元素
- javascript - 模态组件和道具无法正常工作
- reactjs - redux 中 react 与 redux thunk 中间件的 useEffect 挂钩
- pine-script - TradingView HeikenAhi 算法
- html - 调整内容边框
- javascript - 使用 AngularFire 调整 Firestore 缓存大小
- javascript - 为什么我的 jQuery 没有检测到对标签的点击?
- ruby-on-rails - CanCanCan“索引”规则有和没有块之间的区别