如果数据框有 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