gpt4 book ai didi

python - 使用 groupby 和名称列表合并两个数据框

转载 作者:行者123 更新时间:2023-12-01 06:36:50 24 4
gpt4 key购买 nike

你好,我有 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']

我想通过GroupNameListNames合并两个数据框例如,我应该得到:

数据框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相同,并按DataFrame.explode重复行(pandas 0.25+),然后 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]

关于python - 使用 groupby 和名称列表合并两个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59626530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com