如何保持 2 列数据帧的 pandas groupby 计数为零?

2023-12-20

如果数据框有 3 列,我发现这个 StackOverflow 答案给出了零计数:Pandas groupby 为零值 https://stackoverflow.com/questions/37003100/pandas-groupby-for-zero-values

但是,如何对只有两列的数据框执行此操作:

Question
注意:最好在连锁经营中回答:

import numpy as np
import pandas as pd

df = pd.DataFrame({'date': pd.date_range('2018-01-01', periods=6),
                   'a': range(6),
                   })

df.iloc[2,0] = df.iloc[1,0]
print(df)
        date  a
0 2018-01-01  0
1 2018-01-02  1
2 2018-01-02  2
3 2018-01-04  3
4 2018-01-05  4
5 2018-01-06  5

为了获得 a 的计数,我这样做:

df1 = (df.query("a > 0")
    .groupby(['date'])[['a']]
    .count()
    .add_suffix('_count')
    .reset_index() 
     )

print(df1)
        date  a_count
0 2018-01-02        2
1 2018-01-04        1
2 2018-01-05        1
3 2018-01-06        1

连锁经营必答

        date  a_count
0 2018-01-01        0  # also include this row
0 2018-01-02        2
1 2018-01-04        1
2 2018-01-05        1
3 2018-01-06        1

我的尝试:

df1 = (df.query("a > 0")
    .groupby(['date'])[['a']]
    .count()
    .add_suffix('_count')
    .unstack(fill_value=0)
    .to_frame()
    .stack()
    .reset_index() 
     )

print(df1)
   level_0       date  level_2  0
0  a_count 2018-01-02        0  2
1  a_count 2018-01-04        0  1
2  a_count 2018-01-05        0  1
3  a_count 2018-01-06        0  1

这是行不通的。

如何解决这个问题?

相关链接:
Pandas groupby 为零值 https://stackoverflow.com/questions/37003100/pandas-groupby-for-zero-values


在 groupby 之前分配一列您想要计数的内容:

df.assign(to_sum = df.a.gt(0).astype(int)).groupby('date').to_sum.sum()
#date
#2018-01-01    0
#2018-01-02    2
#2018-01-04    1
#2018-01-05    1
#2018-01-06    1
#Name: to_sum, dtype: int32

可以点击.rename('a_count').reset_index()以获得准确的输出。


或者,如果用例有点复杂并且这是不可能的,您可以随时reindex + fillna分组后

(df[df.a > 0].groupby('date').a.count()
     .reindex(df.date.unique()).fillna(0).astype(int)
     .rename('a_count').reset_index())

#        date  a_count
#0 2018-01-01        0
#1 2018-01-02        2
#2 2018-01-04        1
#3 2018-01-05        1
#4 2018-01-06        1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何保持 2 列数据帧的 pandas groupby 计数为零? 的相关文章

随机推荐