Python 将两个数据帧与groupby和名称列表合并

Python 将两个数据帧与groupby和名称列表合并,python,python-3.x,pandas,Python,Python 3.x,Pandas,Hel lo I有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']

Hel lo I有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',但我不知道如何处理pandas中的
ListNames
。有人有主意吗?谢谢你的帮助

首先创建列
Name
,使用与
ListNames
相同的值,并按(0.25+)重复行,然后一起:

#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]