我有一個如下所示的資料框
df = pd.DataFrame(
{'supplier_id':[1,1,1,1],
'prod_id':[123,456,789,342],
'country' : ['UK', 'UK', 'UK','US'],
'transaction_date' : ['13/11/2020', '10/1/2018','11/11/2017', '27/03/2016'],
'industry' : ['STA','STA','PSA','STA'],
'segment' : ['testa','testb','testa','testc'],
'label':[1,1,1,0]})
我的目標是找出以下問題的答案
a) 從當前行來看,同一個供應商在同一個國家成功和失敗了多少次?(使用supplier_id和country列)。這里 column label = 1 表示成功, label=0 表示失敗
同樣,我想根據 和 計算成功和industry失敗country計數segment。
請注意,第一個交易將始終以 0 開頭,因為供應商將沒有與該列關聯的先前交易。
當我們查看已完成業務的時間順序時,我們需要首先根據transaction_date.
所以,我嘗試了以下
df.sort_values(by=['supplier_id','transaction_date'],inplace=True)
df['prev_biz_country_success_count'] = df.groupby(['supplier_id', 'country']).cumcount()
df['prev_biz_country_failure_count'] = df.groupby(['supplier_id', 'country']).cumcount()
但如您所見,我不確定如何包含label列值。意思是,我們需要根據 label=1 和 label=0 來計算。
我希望我的輸出如下所示

uj5u.com熱心網友回復:
我們可以按列對資料框進行分組,supplier_id然后在列上進行轉換函式 ,以獲取前幾行中的條件所在的行數countryapplyshiftcumsumlabel
g = df.groupby(['supplier_id', 'country'])
for criteria, label in dict(success=1, failure=0).items():
df[f'prev_biz_country_{criteria}_count'] =\
g['label'].apply(lambda s: s.eq(label).shift(fill_value=0).cumsum())
supplier_id prod_id country transaction_date industry segment label prev_biz_country_success_count prev_biz_country_failure_count
1 1 456 UK 10/1/2018 STA testb 1 0 0
2 1 789 UK 11/11/2017 PSA testa 1 1 0
0 1 123 UK 13/11/2020 STA testa 1 2 0
3 1 342 US 27/03/2016 STA testc 0 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/433846.html
標籤:Python 熊猫 数据框 麻木的 熊猫-groupby
