每天计算实例pandas数据帧

问题描述 投票:0回答:3

我有一个数据帧

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
python pandas dataframe group-by
3个回答
1
投票

添加带有参数unstackfill_value=0stack

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

0
投票

使用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

0
投票

这是一种方式。类别确保在执行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
© www.soinside.com 2019 - 2024. All rights reserved.