gpt4 book ai didi

python - 是否可以使用 groupby 拆分 Pandas 数据帧并将每个组与单独的数据帧合并

转载 作者:行者123 更新时间:2023-11-30 22:23:20 25 4
gpt4 key购买 nike

我有一个包含分组变量的 Pandas 数据框。我想根据其中一列的内容将每个组与其他数据框合并。例如,我有一个数据框 dfA,它可以定义为:

dfA = pd.DataFrame({'a':[1,2,3,4,5,6],
'b':[0,1,0,0,1,1],
'c':['a','b','c','d','e','f']})

a b c
0 1 0 a
1 2 1 b
2 3 0 c
3 4 0 d
4 5 1 e
5 6 1 f

另外两个数据框 dfB 和 dfC 包含一个公共(public)列 ('a') 和一个额外列 ('d'),可以定义为:

dfB = pd.DataFrame({'a':[1,2,3],
'd':[11,12,13]})

a d
0 1 11
1 2 12
2 3 13


dfC = pd.DataFrame({'a':[4,5,6],
'd':[21,22,23]})

a d
0 4 21
1 5 22
2 6 23

我希望能够根据“b”列拆分 dfA,并将其中一个组与 dfB 合并,另一组与 dfC 合并,以生成如下所示的输出:

   a  b  c   d
0 1 0 a 11
1 2 1 b 12
2 3 0 c 13
3 4 0 d 21
4 5 1 e 22
5 6 1 f 23

在这个简化版本中,我可以连接 dfB 和 dfC 并与 dfA 合并,而无需分成组,如下所示:

dfX = pd.concat([dfB,dfC])
dfA = dfA.merge(dfX,on='a',how='left')
print(dfA)

a b c d
0 1 0 a 11
1 2 1 b 12
2 3 0 c 13
3 4 0 d 21
4 5 1 e 22
5 6 1 f 23

然而,在现实情况下,较小的数据帧将从多个不同的复杂源生成;生成数据帧并预先组合成单个数据帧可能不可行,因为用于合并数据帧的列上可能存在重叠数据(但如果可以根据分组变量拆分数据帧,则可以避免这种情况)。是否可以使用 Pandas groupby() 方法来代替?我正在考虑类似以下的内容(这不起作用,也许是因为我没有正确地将这些组组合到新的数据框中):

grouped = dfA.groupby('b')
for name, group in grouped:
if name == 0:
group = group.merge(dfB,on='a',how='left')
elif name == 1:
group = group.merge(dfC,on='a',how='left')

如有任何想法,我们将不胜感激。

最佳答案

这将修复您的代码

l=[]
grouped = dfA.groupby('b')
for name, group in grouped:
if name == 0:
group = group.merge(dfB,on='a',how='left')
elif name == 1:
group = group.merge(dfC,on='a',how='left')
l.append(group)
pd.concat(l)
Out[215]:
a b c d
0 1 0 a 11.0
1 3 0 c 13.0
2 4 0 d NaN
0 2 1 b NaN
1 5 1 e 22.0
2 6 1 f 23.0

关于python - 是否可以使用 groupby 拆分 Pandas 数据帧并将每个组与单独的数据帧合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48071970/

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