python - 合并 df 与自身分组
问题描述
我有一个df
id qty location
1 1 Paris
1 10 Rome
1 50 London
2 100 Paris
2 40 Oslo
3 2 Paris
3 9 Washington
3 10 London
我正在尝试获取qty
巴黎、罗马和其他地区的总和,location
以便df
看起来像这样:
id qty_total qty_Paris qty_Rome qty_other
1 61 1 10 50
2 140 100 0 40
3 21 2 0 19
我尝试了什么:
df_temp = df.groupby('id')['qty'].sum()
df_temp['qty_Paris'] = df[df.groupby(['id', 'location'])[['qty']]
.sum().reset_index()['location']=='Paris']
但我收到一个错误:
作为索引器提供的不可对齐的布尔系列(布尔系列的索引和索引对象的索引不匹配)。
我应该如何解决这个问题才能得到df
我想要的?
解决方案
单程:
df.loc[~df.location.isin(['Paris', 'Rome']), 'location'] = 'Others'
df1 = df.pivot_table(index='id', columns='location', values='qty',
aggfunc=sum, fill_value=0,).add_prefix('qty_').rename_axis(columns=None)
df1['qty_total'] = df1.sum(1)
输出:
qty_Others qty_Paris qty_Rome qty_total
id
1 50 1 10 61
2 40 100 0 140
3 19 2 0 21
完整示例:
df = pd.DataFrame({'id': {0: 1, 1: 1, 2: 1, 3: 2, 4: 2, 5: 3, 6: 3, 7: 3},
'qty': {0: 1, 1: 10, 2: 50, 3: 100, 4: 40, 5: 2, 6: 9, 7: 10},
'location': {0: 'Paris',
1: 'Rome',
2: 'London',
3: 'Paris',
4: 'Oslo',
5: 'Paris',
6: 'Washington',
7: 'London'}})
df.loc[~df.location.isin(['Paris', 'Rome']), 'location'] = 'Others'
df1 = df.pivot_table(index='id', columns='location', values='qty',
aggfunc=sum, fill_value=0,).add_prefix('qty_').rename_axis(columns=None)
df1['qty_total'] = df1.sum(1)
推荐阅读
- openedge - 如何在实现框架后重新定位框架或将浏览分配给正在进行 ABL 中的另一个框架?
- javascript - if循环不要跳转到else
- java - Java 中的反应式生产者消费者可观察
- excel - Acrobat Reader 2017 参考:缺少:Adobe Acrobat XX.X 类型库
- c++ - 谁能帮我弄清楚为什么我的 lValue 总是出错
- html - 双色文本
- go - 最简单的 Go 竞争条件示例?
- azure-data-explorer - 如何:为一系列(日期)值运行用户定义的函数
- vb.net - 创建对象时Webclient下载未开始
- python-3.x - 来自 Python for Everyone 第 12 章讲座的示例浏览器代码无法正常工作,如视频所示