此问题已在此处找到答案:
零值分组(5个答案)
昨天关门了。
我有一个由客户和国家/地区每月使用产品的Pandas数据框架,如下所示:
df = pd.DataFrame(
[
('12345', 'CH', 'A', 'Prod 1'),
('12345', 'CH', 'A', 'Prod 2'),
('67890', 'DE', 'A', 'Prod 1'),
('98765', 'CH', 'B', 'Prod 3'),
('nnnnn', 'NL', 'C', 'Prod 1')
],
columns=['Client_ID', 'Country', 'Customer', 'Product Used']
)
我想列出按客户和国家分组的产品使用总量。pandas groupby功能让我更接近我需要的东西。
df.groupby(['Customer', 'Country','Product Used']).count()
# Reuse Client_ID as Count
Customer Country Product Used Client_ID
A CH Prod 1 3
Prod 2 5
DE Prod 1 1
B CH Prod 3 2
C NL Prod 1 1
是否有办法将数据中未显示为0的组合包括在内?因此,我的结果如下所示:
Customer Country Prod 1 Prod 2 Prod 3
A CH 3 5 0
DE 1 0 0
B CH 0 0 2
C NL 1 0 0
1条答案
按热度按时间xfyts7mz1#
使用
pd.crosstab
:Product Used Prod 1 Prod 2 Prod 3
Customer Country
A CH 1 1 0
DE 1 0 0
B CH 0 0 1
C NL 1 0 0
new_df = (
df.groupby(['Customer', 'Country', 'Product Used']).count()
.unstack(fill_value=0)
.droplevel(0, axis=1)
)
```
new_df
:或与
pivot_table
具有aggfunc
数到fill_value=0
:Product Used Prod 1 Prod 2 Prod 3
Customer Country
A CH 1 1 0
DE 1 0 0
B CH 0 0 1
C NL 1 0 0