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

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

為每個列對組合查找以前的非零對,并為使用 python 的人創建單獨的列

為每個列對組合查找以前的非零對,并為使用 python 的人創建單獨的列

飲歌長嘯 2021-09-02 15:39:13
我有一個這樣的數據框:A     B1     10     02     30     00     05     40     30     0我想添加具有以下條件的另外兩列:對于每個 A 和 B 對,先前的非零對值將添加到其他兩列中,但第一次在兩列中都為零,例如,輸出將類似于:A     B    C    D1     1    0    00     0    1    12     3    1    10     0    2    30     0    2    35     4    2    30     3    5    40     0    0    3我可以使用循環來做到這一點,但我希望以大多數 pythonic 方式執行最少的時間。
查看完整描述

2 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

我分解步驟


mask=df.A.ne(0)|df.B.ne(0) # get the target row 

df1=df[mask] # filter from original df

df1.index+=1 # get the index increase by one 

df1.columns=['C','D'] # reassign the columns 

pd.concat([df,df1],axis=1).ffill().fillna(0).astype(int) # using ffill

Out[569]: 

   A  B  C  D

0  1  1  0  0

1  0  0  1  1

2  2  3  1  1

3  0  0  2  3

4  0  0  2  3

5  5  4  2  3

6  0  3  5  4

7  0  0  0  3


查看完整回答
反對 回復 2021-09-02
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

我相信一種方法是將A和B用作您的C和D列,將兩者都為 0 的行替換為nan,向前填充,最后NaN用 0替換頂部:


df[['C','D']] = df[['A','B']].shift()


df.loc[(df[['C','D']] == 0).all(1), ['C','D']] = np.nan


df.ffill().fillna(0).astype(int)


   A  B  C  D

0  1  1  0  0

1  0  0  1  1

2  2  3  1  1

3  0  0  2  3

4  0  0  2  3

5  5  4  2  3

6  0  3  5  4

7  0  0  0  3


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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