原始数据如下所示:
Date E
0 2017-09-01 -
1 2017-09-01 +
2 2017-09-01 +
3 2017-09-01 +
...
...
申请groupby后:
df.groupby(['Date', 'E'])['Date'].count().to_frame(name = 'Count').reset_index()
我得到一个如下所示的数据框:
Date E Count
0 2017-09-01 + 11
1 2017-09-01 - 1
2 2017-09-04 + 1
3 2017-09-04 - 7
4 2017-09-05 + 1
5 2017-09-05 - 23
如何将其转换为数据框,而不是:
Date + -
0 2017-09-01 11 1
2 2017-09-04 1 7
4 2017-09-05 1 23
答案 0 :(得分:4)
我认为最好使用GroupBy.size
,因为GroupBy.count
用于计算非NaN
值。
然后按unstack
重塑:
df = df.groupby(['Date', 'E'])['Date'].size().unstack(fill_value=0).reset_index()
print (df)
E Date + -
0 2017-09-01 3 1
较少的打字解决方案,但更大的df更慢crosstab
:
df = pd.crosstab(df['Date'], df['E'])
print (df)
E + -
Date
2017-09-01 3 1
答案 1 :(得分:4)
或者,使用pd.crosstab
In [1736]: pd.crosstab(df.Date, df.E)
Out[1736]:
E + -
Date
2017-09-01 3 1
2017-09-02 1 0
或者,pivot_table
In [1737]: pd.pivot_table(df, index=['Date'], columns=['E'], aggfunc=len, fill_value=0)
Out[1737]:
E + -
Date
2017-09-01 3 1
2017-09-02 1 0