Pandasでの数字の勝者のストリークID -- python フィールド と pandas フィールド と transform フィールド と pandas-groupby フィールド 関連 問題

Number winning streak ID's in pandas












4
vote

問題

日本語

私はいくつかの期間にわたっていくつかのチームのための勝利の縞模様を持つPython Pandas DataFrameを持っています、そして私は縞を時系列的に識別したいと思います。だから、私が持っているもの:

<事前> <コード> import pandas as pd data = pd.DataFrame({'period': list(range(1,7))+list(range(1,6)), 'team_id': ['A']*6 + ['B']*5, 'win': [1,1,1,0,1,1,1,0,0,1,1], 'streak_length': [1,2,3,0,1,2,1,0,0,1,2]}) print(data)

そして私がしたいことは次のとおりです。

<事前> <コード> result = pd.DataFrame({'period': list(range(1,7))+list(range(1,6)), 'team_id': ['A']*6 + ['B']*5, 'win': [1,1,1,0,1,1,1,0,0,1,1], 'streak_length': [1,2,3,0,1,2,1,0,0,1,2], 'streak_id': [1,1,1,None,2,2,1,None,None,2,2]}) print(result)

team_id でグループビリーを除き、ストリークの長さを超えて合計しようとしましたが、これは機能しないと思います。あらゆる助けがあります!

英語

I have a Python pandas dataframe with winning streaks for some teams over several time periods and I would like to identfy the streaks chronologically. So, what I have is:

import pandas as pd data = pd.DataFrame({'period': list(range(1,7))+list(range(1,6)),     'team_id':       ['A']*6 + ['B']*5,     'win':           [1,1,1,0,1,1,1,0,0,1,1],     'streak_length': [1,2,3,0,1,2,1,0,0,1,2]}) print(data) 

And what I would like to have is:

result = pd.DataFrame({'period': list(range(1,7))+list(range(1,6)),     'team_id':       ['A']*6 + ['B']*5,     'win':           [1,1,1,0,1,1,1,0,0,1,1],     'streak_length': [1,2,3,0,1,2,1,0,0,1,2],     'streak_id':     [1,1,1,None,2,2,1,None,None,2,2]}) print(result) 

I tried to groupby by team_id and sum over streak length, but it can be repeated, so I think this would not work. Any help appreciated!

</div
           
   
   

回答リスト

6
 
vote
vote
ベストアンサー
 

<コード> Series.shift <コード> Series.ne および Series.cumsum 、フィルタのみ win next1 in Lambda関数: <コード> next2

 

Create consecutive groups by Series.shift Series.ne and Series.cumsum, filter only 1 in win and use GroupBy.transform with factorize in lambda function:

m = data['win'].eq(1) g = data['win'].ne(data['win'].shift()).cumsum()  data['streak_id'] = g[m].groupby(data['team_id']).transform(     lambda x: pd.factorize(x)[0] + 1 )  print (data)     period team_id  win  streak_length  streak_id 0        1       A    1              1        1.0 1        2       A    1              2        1.0 2        3       A    1              3        1.0 3        4       A    0              0        NaN 4        5       A    1              1        2.0 5        6       A    1              2        2.0 6        1       B    1              1        1.0 7        2       B    0              0        NaN 8        3       B    0              0        NaN 9        4       B    1              1        2.0 10       5       B    1              2        2.0 
</div
 
 
 
 

関連する質問

1  Pandas Groupbyをグループ行グループに使用するには、列値を合計して決定できますか?  ( Can you use pandas groupby to group rows determined by summing a column value ) 
データフレームの行を1列の値でグループ化したいと思います。以下に示す例は、iが150の値で 'NumberOfTrades'の値をグループ化していた場合であるので、上位2行がグループ化され、下位3行がグループ化されます。私が理解している次のステップは、各グルー...

1  Pandasのグループで行方不明の行を追加する  ( Adding rows for missing year by group in pandas ) 
こののように見えるデータフレームを持っています <事前> <コード> pd.DataFrame({'A': ['C1', 'C1', 'C1', 'C1', 'C2', 'C2', 'C3', 'C3'], ...: ...

-1  列NANに他の値を作成せずにGroupByを使用する方法  ( How do i use groupby without making other values in the column nan ) 
「Employee No」と「Client Group Name」という欄に「START」という欄に、列「割り当て開始日」から最小値を取得しようとしています。 「Start」列に、「クライアントグループ名」ごと、すべての「従業員番号」ごとに最小の「割り当て開始...

0  GroupByを使用して類似値をグループ化する方法  ( How to use groupby to group similar value ) 
次のスニペットがあります <コード> import pdfplumber, requests from io import BytesIO import pandas as pd def get_title_liked_txt(page: object):...

0  週にデータフレームの返品グループを持つ方法はありますか?  ( Is there a way to have a dataframe return groupings per week ) 
私は以下の表のように提示された情報を持つデータフレームを持っています、日付は私のindex: <事前> <コード> date | Company | Industry | Focus 2020-08-02 Ford Auto ...

0  大規模データセットに対するマルチグループビーカウントアクティビティの最も効率的な方法  ( Most efficient way of multi groupby count activities on large datasets ) 
(任意の長さの)属性(列)値のサブセットを見つけようとしています。これは、特定のデータセット内で一意です。それらを見つけるために私の知識の最善のための最も効率的な方法は、Pandasの対応するグループサイズをカウントする複数の(多くの)GroupByアクティビ...

0  Pythonの16行ごとの最も頻繁な価値を見つける  ( Find the most frequent value of every 16 rows in python ) 
私は800人の高さを表すデータフレームを持っています、そして私は16人の16人の最も頻繁な高さを見つけたいです。私は最も頻繁な値を見つけるために次のスクリプトを使うことができることを知っています: <事前> <コード> df['height'].value_c...

-1  列の相互要素による行時間の違い計算と連結  ( Row time differences calculation and concatenation by mutual element in column ) 
私のDFは次のようになります。 <事前> <コード> A7 A8 欄の相互要素に基づいて新しいDFを作成し、同じ要素にアクションと削除の両方がある場合に操作を実行します。 iif t19 欄の要素には、アクションの追加と削除の両方があります。 N0...

1  PD.GroupBy他のグループビリーで、PD.Cutの結果を転置します  ( Pd groupby on another groupby transposing results of pd cut ) 
もう一つのかなり複雑な質問私はパンダとそのグループビリーとカット機能について頑張っています。状況は次のとおりです。このようなデータフレームがあるとしましょう。 <コード> import Pandas as pd pd.DataFrame(data) ...

0  Pandas GroupBy AGGは複数のパラメータを持つ関数を適用します  ( Pandas groupby agg apply a function with multiple parameters ) 
GroupByデータフレームの複数の列からパラメータを必要とし、2つのスケーラ値を返すPandas GroupByにどのような関数を適用することができます。 下記は繰り返し可能な例です。最後の行はf_value を取得します <事前> <コード> impor...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有