python - 使用 groupby 和名称列表合并两个数据框
问题描述
你好,我有 2 个数据框,例如:
数据框1
GroupName weigth Name
Group1 34 Baby1
Group1 43 Baby2
Group1 34 Baby3
Group2 32 Baby4
Group2 32 Baby2
Group3 33 Baby9
数据框2
GroupName Size ListNames
Group1 89 ['Baby1','Baby2']
Group1 87 ['Baby3']
Group2 78 ['Baby4','Baby2']
Group3 80 ['Baby9']
我想合并这两个数据帧GroupName
在ListNames
这里我应该得到例如:
数据框3
GroupName weigth Name Size ListNames
Group1 34 Baby1 89 ['Baby1','Baby2']
Group1 43 Baby2 89 ['Baby1','Baby2']
Group1 34 Baby3 87 ['Baby3']
Group2 32 Baby4 78 ['Baby4','Baby2']
Group2 32 Baby2 78 ['Baby4','Baby2']
Group3 33 Baby9 80 ['Baby9']
我知道我们应该使用 groupby 'GroupName' 但我不知道如何处理ListNames
pandas 中的 tha。有人有想法吗?谢谢您的帮助。
解决方案
首先创建Name
具有相同值的列,并按(pandas 0.25+)ListNames
重复行,然后一起:DataFrame.explode
merge
#if necessary convert strings to lists
import ast
#df2['ListNames'] = df2['ListNames'].apply(ast.literal_eval)
df = df1.merge(df2.assign(Name=df2['ListNames']).explode('Name'), on=['GroupName','Name'])
print (df)
GroupName weigth Name Size ListNames
0 Group1 34 Baby1 89 [Baby1, Baby2]
1 Group1 43 Baby2 89 [Baby1, Baby2]
2 Group1 34 Baby3 87 [Baby3]
3 Group2 32 Baby4 78 [Baby4, Baby2]
4 Group2 32 Baby2 78 [Baby4, Baby2]
5 Group3 33 Baby9 80 [Baby9]
推荐阅读
- reactjs - 如何在排毒中使用 react-native-i18n[react-native]
- scala - 如何显式调用和使用 Functor 函数
- python - Python Qt - 如何从另一个线程在表格小部件中插入项目?
- c - 如何在二维数组中移动位
- javascript - 如何顺序或同步执行功能
- three.js - ThreeJS:3js 会在运行时修改对象的 uuid 吗?
- c# - NUC 计算机 (Windows 10) 上的 C# 应用程序,用于长时间收集数据
- python - Python 非活动屏幕截图
- python - 行空间函数中的步长问题
- git - 如何保护文件夹免受服务器上的 git pull 更改