2017-04-08 11 views
0

私の問題については少し説明します。ストリング発生の累積頻度

私は年によってインデックスされたチャンピオンズリーグカップの勝者のデータフレームを持っています。

このように、チーム名は文字列です。

year team   need this   year team  wins to date 

1  team1       1  team1   1 
2  team2       2  team2   1 
3  team1       3  team1   2 
4  team3       4  team3   1 

私はその後、各チームの線グラフと、彼らはカップを獲得した回数をプロットすることができるように、累積勝利で新しい列を作成したいと思います。つまり、x軸の年とyの累積頻度が必要で、上位4チームの4つの異なる行が必要です。

おそらく、カウント関数とループを使用する簡単な方法がありますが、私はPythonにはかなり新しく、これらをよく理解していません。どんな助けでも大歓迎です!

+0

私はそれを自分自身でやろうとしていたことを編集していただきありがとうございます。 –

答えて

1

ルック。 チームがnullであるかどうかにかかわらず、groupbyチームとtransformを使用してcumsumを実行することができます。

df 

入力:

year team 
0  1 team1 
1  2 team2 
2  3 team1 
3  4 team3 

は、変換

df['wins to date'] = df.groupby('team').transform(lambda x: x.notnull().cumsum()) 
df 

やDSMなどを行い勧め:

df['wins to date'] = df.groupby('team').cumcount()+1 

出力

year team wins to date 
0  1 team1    1 
1  2 team2    1 
2  3 team1    2 
3  4 team3    1 
+2

おそらく '.cumcount()+ 1'ですか? – DSM

+0

@Dsmはい。ありがとう。 –

+0

ありがとうございました! –

0

groupbySeries.cumsumと使いたいと思います。以下のように:groupbytransformcumcount、そしてcumsumhttp://pandas.pydata.org/pandas-docs/stable/groupby.html)上のパンダのドキュメントで

df.groupby('team').cumsum() 
+0

これをチームの文字列値にどのように適用すればよいですか? cumsum関数は文字列を一緒に追加するだけです(数字3ではなくteam1team1team1)。私はその数を数えたいと思う。これを行う方法はありますか? –

+0

しかし、df ['wins to date']は整数ですか?あなたが累積して合計したい列ではないでしょうか? – splinter

+0

ああ申し訳ありませんが、 '今までの勝利は、作成するような列のIDです、それはそれに任意の数字を持っていない、'チーム1 'の回数を記入するようなID thjatの行まで、 –