pandas - pandas 聚合包括所有组
问题描述
我对 groupby 聚合有以下问题,即添加未在数据框中显示但应基于所需输出的组。一个例子:
import pandas as pd
from pandas.compat import StringIO
csvdata = StringIO("""day,sale
1,1
2,4
2,10
4,7
5,2.3
7,4.4
2,3.4""")
#day 3,6 are intentionally not included here but I'd like to have it in output
df = pd.read_csv(csvdata, sep=",")
df1=df.groupby(['day'])['sale'].agg('sum').reset_index().rename(columns={'sale':'dailysale'})
df1
我怎样才能得到以下内容?谢谢!
1 1.0
2 17.4
3 0.0
4 7.0
5 2.3
6 0.0
7 4.4
解决方案
您可以在聚合后添加Series.reindex
指定的:range
sum
df1 = (df.groupby(['day'])['sale']
.sum()
.reindex(range(1, 8), fill_value=0)
.reset_index(name='dailysale'))
print (df1)
day dailysale
0 1 1.0
1 2 17.4
2 3 0.0
3 4 7.0
4 5 2.3
5 6 0.0
6 7 4.4
另一个想法是使用ordered categorical
,所以聚合sum
添加缺失的行:
df['day'] = pd.Categorical(df['day'], categories=range(1, 8), ordered=True)
df1 = df.groupby(['day'])['sale'].sum().reset_index(name='dailysale')
print (df1)
day dailysale
0 1 1.0
1 2 17.4
2 3 0.0
3 4 7.0
4 5 2.3
5 6 0.0
6 7 4.4
推荐阅读
- javascript - 使用 dns.lookup() node.js 按域获取 IP 地址
- typescript - 在 TypeScript 3 中扩展 Document 对象
- ssis - 从 ssis 包发布 http 请求的最佳方式是什么
- python - 将任意数据从 FlaskForm 对象传递到模板
- blockchain - Waves平台对智能账户和智能资产有哪些类型的交易?
- excel - 键已与元素关联
- angularjs - 在多个视图中使用单个组件实例
- php - 使用 Twig 遍历文件
- r - 在 R 中创建一个包含 2 个向量的脚本
- pandas - 如何根据 IP 范围过滤数据帧