每天计算实例pandas数据帧
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天计算实例pandas数据帧相关的知识,希望对你有一定的参考价值。
我有一个数据帧
df = pd.DataFrame(data=[[1,0],[1,0],[2,0],[2,1]],columns=['day','class'])
我想每天计算一级的实例。我用这种方式使用groupby,
df.groupby(['class','day'])['class'].count()
Out[51]:
day class
1 0 2
2 0 1
1 1
Name: class, dtype: int64
但我还想在第1天第1课没有实例:
Out[51]:
day class
1 0 2
1 0
2 0 1
1 1
Name: class, dtype: int64
答案
添加带有参数unstack
和fill_value=0
的stack
:
df = df.groupby(['day','class'])['class'].count().unstack(fill_value=0).stack()
print (df)
day class
1 0 2
1 0
2 0 1
1 1
dtype: int64
另一答案
使用pivot_table,即使不如jezrael的解决方案优雅:
df['class1'] = df['class']
df = df.pivot_table(index='class', columns='day', values='class1',
fill_value=0, aggfunc='count').unstack()
输出:
day class
1 0 2
1 0
2 0 1
1 1
另一答案
这是一种方式。类别确保在执行groupby
操作时,保持每个组合。
这是一种更加面向数据的与面向操作的解决方案。
df = pd.DataFrame(data=[[1,0], [1,0], [2,0], [2,1]],
columns=['day', 'class'],
dtype='category')
df['count'] = 1
res = df.groupby(['class', 'day'], as_index=False)['count'].sum()
res['count'] = res['count'].fillna(0)
# class day count
# 0 0 1 2.0
# 1 0 2 1.0
# 2 1 1 0.0
# 3 1 2 1.0
以上是关于每天计算实例pandas数据帧的主要内容,如果未能解决你的问题,请参考以下文章
pandas 求两个时间差, 转化秒,判断时间差是否大于阈值
如何将破折号 (-) 的所有实例替换为 pandas 数据帧中字符串中间的数字零 (0)?