2017-09-20 8 views
4

元のデータは次のようになります。新しい列を1つのレベルに追加するときにpandasをグループ別に使用するにはどうすればよいですか?

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 

答えて

4

GroupBy.sizeは、GroupBy.countが使用されていますので、より良いと思います。NaNの値になりません。

df = df.groupby(['Date', 'E'])['Date'].size().unstack(fill_value=0).reset_index() 
print (df) 
E  Date + - 
0 2017-09-01 3 1 

少ないタイピング・ソリューションを、より大きなDFのslowierにcrosstab次のとおりです:

はその後unstackによって再形成

df = pd.crosstab(df['Date'], df['E']) 
print (df) 
E   + - 
Date    
2017-09-01 3 1 
+0

5秒前...笑 – Wen

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 
関連する問題