首页 > 解决方案 > 如何使用熊猫对两个数据框之间的列求和?

问题描述

我正在尝试对两个表之间的列求和:“diario”和“mensal”以更新“count”和“sum”的值。我的问题是:某些列的结果是空的。

它适用于少于 100 行的档案,但我需要为 4800 行的“日记”执行此操作,而“mensal”有 5642 行。

这是代码和表格示例:

diario = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/diario.csv')
mensal = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/mensal.csv')

mensal_ini = mensal.copy()
mensal.loc[(mensal['imsi'].isin(diario['imsi'])) & (mensal['operadora'].isin(diario['operadora'])), "sum"] += diario['sum']
mensal.loc[(mensal['imsi'].isin(diario['imsi'])) & (mensal['operadora'].isin(diario['operadora'])), "count"] += diario['count']

mensal = pd.concat([mensal, diario]).drop_duplicates(subset=['imsi','operadora'])

f = open("/content/drive/MyDrive/Colab Notebooks/mensal_result.csv", 'w')
f.writelines(mensal.to_csv(index=False))
f.close()

表 1 - “日记”

imsi operadora sum count
xxx1 yyy       10 1
xxx2 yyy       20 3

表 2 - “Mensal”

imsi operadora sum count
xxx1 yyy       30 2
xxx1 abc       25 4
xxx3 yyy       14 2

表 3 - “结果”

imsi operadora sum count
xxx1 yyy       empty empty
xxx1 abc       25 4
xxx2 yyy       20 3
xxx3 yyy       14 2

标签: pythonpandas

解决方案


concat然后尝试groupby

pd.concat([df1,df2]).groupby(['imsi','operadora'], as_index=False).sum()

输出:

   imsi operadora  sum  count
0  xxx1       abc   25      4
1  xxx1       yyy   40      3
2  xxx2       yyy   20      3
3  xxx3       yyy   14      2

推荐阅读