亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有條件的熊貓申請

有條件的熊貓申請

jeck貓 2021-12-09 15:54:59
我有不同狀態的客戶重復,因為每個客戶訂閱/產品都有一行。我想new_status為客戶生成一個并且要“取消”它,每個訂閱狀態都必須一起“取消”。我用了:df['duplicated'] = df.groupby('customer', as_index=False)['customer'].cumcount()將索引中的每個重復項分開以指示重復值Customer | Status | new_status | duplicated X       |canceled|            | 0 X       |canceled|            | 1 X       |active  |            | 2 Y       |canceled|            | 0 A       |canceled|            | 0 A       |canceled|            | 1 B       |active  |            | 0 B       |canceled|            | 1因此,我想使用 .apply 和/或 .loc 來生成:Customer | Status | new_status | duplicated X       |canceled|            | 0 X       |canceled|            | 1 X       |active  |            | 2 Y       |canceled|            | 0 A       |canceled| canceled   | 0 A       |canceled| canceled   | 1 B       |active  |            | 0 B       |canceled|            | 1
查看完整描述

1 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

通過比較列Series.eq的==,并使用GroupBy.transform與GroupBy.all用于檢查是否所有值都True按組S,然后比較Customer通過Series.duplicated與keep=False退貨所有受騙者。最后按位AND( &)鏈接在一起,并通過numpy.where以下方式設置值:


m1 = df['Status'].eq('canceled').groupby(df['Customer']).transform('all')

m2 = df['Customer'].duplicated(keep=False)


df['new_status'] = np.where(m1 & m2, 'cancelled', '')

print (df)

  Customer    Status new_status  duplicated

0        X  canceled                      0

1        X  canceled                      1

2        X    active                      2

3        Y  canceled                      0

4        A  canceled  cancelled           0

5        A  canceled  cancelled           1

6        B    active                      0

7        B  canceled                      1


查看完整回答
反對 回復 2021-12-09
  • 1 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號