python - 如何使用熊猫对两个数据框之间的列求和?
问题描述
我正在尝试对两个表之间的列求和:“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
解决方案
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
推荐阅读
- python - ImportError:没有名为 bs4 的模块(MacOS)
- python - 基于分组变换数组的各个部分
- prolog - XSB 运行时错误 - MulVal
- python - 如何在熊猫数据框中使用字符串作为列名
- python-3.x - python3以安全的方式检查ldap用户名和密码
- javascript - 如何使用 node.js 读取发布请求有效负载并表达?
- mysql - MySQL/Doctrine:允许插入空字段,但不允许更新
- java - 如何使按钮对鼠标单击做出反应
- docker - 容器注册推送
- c# - 是否可以在没有 UITableViewController 的情况下在 UITableView 中定义行的高度?