gpt4 book ai didi

python - 根据某些列名称对不同数据帧中的列求和

转载 作者:行者123 更新时间:2023-12-01 09:16:01 28 4
gpt4 key购买 nike

假设我有一个主数据框

main_df

Cri1 Cri2 Cr3 total
0 A1 A2 A3 4
1 B1 B2 B3 5
2 C1 C2 C3 6

我还有 3 个数据框

df_1

Cri1 Cri2 Cri3 value
0 A1 A2 A3 1
1 B1 B2 B3 2

df_2
Cri1 Cri2 Cri3 value
0 A1 A2 A3 9
1 C1 C2 C3 10

df_3
Cri1 Cri2 Cri3 value
0 B1 B2 B3 15
1 C1 C2 C3 17

我想要的是根据 Cri 将每个帧 df 的值添加到 main_df 中的总计即 main_df 将变为

main_df

      Cri1  Cri2  Cri3  total
0 A1 A2 A3 14
1 B1 B2 B3 22
2 C1 C2 C3 33

当然,我可以使用 for 循环来完成此操作,但最后我想将该方法应用于大量数据,例如每个数据帧中 50000 行。

还有其他方法可以解决吗?

谢谢!

最佳答案

首先,您应该对齐数字列名称。在这种情况下:

df_main = df_main.rename(columns={'total': 'value'})

然后你有几个选择。

连接+分组

您可以连接然后使用 sum 执行 groupby:

res = pd.concat([df_main, df_1, df_2, df_3])\
.groupby(['Cri1', 'Cri2', 'Cri3']).sum()\
.reset_index()

print(res)

Cri1 Cri2 Cri3 value
0 A1 A2 A3 14
1 B1 B2 B3 22
2 C1 C2 C3 33

设置索引+减少/添加

或者,您可以创建按条件列索引的数据框列表。然后使用functools.reducepd.DataFrame.add对这些数据帧求和。

from functools import reduce

dfs = [df.set_index(['Cri1', 'Cri2', 'Cri3']) for df in [df_main, df_1, df_2, df_3]]

res = reduce(lambda x, y: x.add(y, fill_value=0), dfs).reset_index()

print(res)

Cri1 Cri2 Cri3 value
0 A1 A2 A3 14.0
1 B1 B2 B3 22.0
2 C1 C2 C3 33.0

关于python - 根据某些列名称对不同数据帧中的列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51246570/

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