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

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

基于兩個條件的 Python pandas 數據幀回填

基于兩個條件的 Python pandas 數據幀回填

紅顏莎娜 2022-06-07 19:15:23
我有一個這樣的數據框:   Bool   Hour0  False  121  False  242  False  123  False  244  True   125  False  246  False  127  False  248  False  129  False  2410 False  1211 True   24我想將“布爾”列中的真值回填到“小時”第一次達到“12”時的點。結果將是這樣的:   Bool   Hour  Result0  False  12    False1  False  24    False2  False  12    True      <- desired backfill3  False  24    True      <- desired backfill4  True   12    True5  False  24    False6  False  12    False7  False  24    False8  False  12    False9  False  24    False10 False  12    True      <- desired backfill11 True   24    True任何幫助是極大的贊賞!非常感謝!
查看完整描述

3 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

這有點難以實現,這里我們可以使用groupbywith idxmax


s=(~df.Bool&df.Hour.eq(12)).iloc[::-1].groupby(df.Bool.iloc[::-1].cumsum()).transform('idxmax')

df['result']=df.index>=s.iloc[::-1]

df

Out[375]: 

     Bool  Hour  result

0   False    12   False

1   False    24   False

2   False    12    True

3   False    24    True

4    True    12    True

5   False    24   False

6   False    12   False

7   False    24   False

8   False    12   False

9   False    24   False

10  False    12    True

11   True    24    True


查看完整回答
反對 回復 2022-06-07
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

s連續創建一個 groupIDFalse并與它們分開True。Groupby on Hourequals12使用s. 使用變換sum和從每組的自下而上獲取oncumsum的計數,并返回on和的值True12True0orBool


s = df.Bool.ne(df.Bool.shift()).cumsum()

s1 = df.where(df.Bool).Bool.bfill()

g = df.Hour.eq(12).groupby(s)

df['bfill_Bool'] = (g.transform('sum') - g.cumsum()).eq(0) & s1 | df.Bool


Out[905]:

     Bool  Hour  bfill_Bool

0   False    12       False

1   False    24       False

2   False    12        True

3   False    24        True

4    True    12        True

5   False    24       False

6   False    12       False

7   False    24       False

8   False    12       False

9   False    24       False

10  False    12        True

11   True    24        True


查看完整回答
反對 回復 2022-06-07
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

IIUC,你可以這樣做:


s = df['Bool'].shift(-1)

df['Result'] = df['Bool'] | s.where(s).groupby(df['Hour'].eq(12).cumsum()).bfill()

輸出:


     Bool  Hour  Result

0   False    12   False

1   False    24   False

2   False    12    True

3   False    24    True

4    True    12    True

5   False    24   False

6   False    12   False

7   False    24   False

8   False    12   False

9   False    24   False

10  False    12    True

11   True    24    True


查看完整回答
反對 回復 2022-06-07
  • 3 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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