2016-09-29 8 views
1

を変更/生成するために複数の列にグループ化し、カウントを適用することによりPDの優れた知識とのそれらのための非常に単純ですが、私は単純に変換するにこだわっ:パンダ - オーダー私は私が何をしようとしていると確信しているデータフレーム

+---------+------------+-------+ 
| Trigger | Date | Value | 
+---------+------------+-------+ 
| 1 | 01/01/2016 | a | 
+---------+------------+-------+ 
| 2 | 01/01/2016 | b | 
+---------+------------+-------+ 
| 3 | 01/01/2016 | c | 
+---------+------------+-------+ 

...etc, into: 

+------------+---------------------+---------+---------+---------+ 
| Date  | #of triggers  | count a | count b | count c | 
+------------+---------------------+---------+---------+---------+ 
| 01/01/2016 | 3     | 1 | 1 |  1 | 
+------------+---------------------+---------+---------+---------+ 
| 02/01/2016 | 5     | 2 | 1 |  2 | 
+------------+---------------------+---------+---------+---------+ 

... and so on 

問題は、私はこれを達成するためにどのようのない流血のアイデア..私はSO洗い上げてきた を持っていないが、私は私の特定の場合に適用されるものを見つけることができないようです。

は、私はそれをすべての日付でグループに必要があるだろうと推測、それが行われ、その後たら、どのような私は、残りの列を取得するために何をする必要がありますか?

初期DFは、SQL錬金術クエリオブジェクトからロードされ、その後、私は、上記の結果を得るためにそれを操作したいです。どのようにこれを行うでしょうか?

おかげ

答えて

1

あなたはunstackGroupBy.sizeを使用することができ、また、パラメータsort=Falseは便利です:

df1 = df.groupby(['Date','Value'])['Value'].size().unstack(fill_value=0) 
df1['Total'] = df1.sum(axis=1) 
cols = df1.columns[-1:].union(df1.columns[:-1]) 
df1 = df1[cols] 
print (df1) 
Value  Total a b c 
Date      
01/01/2016  3 1 1 1 

sizecountの違いは次のとおりです。
sizeカウントNaN値、countではない。

+0

解決策を気に入っていますが、これはa、b、cの値を数えています。 – Meh

+0

私は最も簡単に 'sum'を使うと思って、次に列を並べ替えます。私の解決策をチェックしてください。 – jezrael

+0

ありがとうございます – Meh

2
df.groupby(['Date','Value']).count().unstack(level=-1) 
+0

申し訳ありませんが、私はあなたの答えを選択しなかったが、私はjezraelは少し説明する時間がかかったという事実を好みました。 – Meh

関連する問題