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

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

識別 Pandas DataFrame 中每一行的第一個和所有非零值

識別 Pandas DataFrame 中每一行的第一個和所有非零值

臨摹微笑 2023-05-23 10:18:01
我有一個類似于以下內容的 Pandas DataFramedata=pd.DataFrame([['Juan',0,0,400,450,500],['Luis',100,100,100,100,100],[ 'Maria',0,20,50,300,500],[ 'Laura',0,0,0,100,900],['Lina',0,0,0,0,10]])data.columns=['Name','Date1','Date2','Date3','Date4','Date5']    Name  Date1  Date2  Date3  Date4  Date50   Juan      0      0    400    450    5001   Luis    100    100    100    100    1002  Maria      0     20     50    300    5003  Laura      0      0      0    100    9004   Lina      0      0      0      0     10我想生成兩個單獨的數據框。第一個應該在前一個 DataFrame 的非零值的所有位置包含一個 1,即    Name  Date1  Date2  Date3  Date4  Date50   Juan      0      0      1      1      11   Luis      1      1      1      1      12  Maria      0      1      1      1      13  Laura      0      0      0      1      14   Lina      0      0      0      0      1第二個應該在每行的第一個非零值中有一個 1。    Name  Date1  Date2  Date3  Date4  Date50   Juan      0      0      1      0      01   Luis      1      0      0      0      02  Maria      0      1      0      0      03  Laura      0      0      0      1      04   Lina      0      0      0      0      1我檢查了其他帖子,發現我可以通過以下方式獲得第一個out=data.copy()out.iloc[:,1:6]=data.select_dtypes(include=['number']).where(data.select_dtypes(include=['number'])==0,1)有沒有更容易/更簡單的方法來實現我想要的第一個結果?和有誰知道如何實現第二個結果?(當然還有一個雙循環,它逐個比較數字,這是我寧愿避免的蠻力方法)
查看完整描述

1 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

首先,您只能選擇數字列并用in替換非0值,然后為第二個添加累積總和,比較第一個值和布爾掩碼轉換為整數:1DataFrame.maskaxis=11DataFrame.eqDataFrame.astype

df1, df2 = data.copy(), data.copy()

cols = df1.select_dtypes(include=np.number).columns

df1[cols] = df1[cols].mask(data[cols].ne(0), 1)


df2[cols] = df1[cols].cumsum(axis=1).eq(1).astype(int)

print(df1)

? ? Name? Date1? Date2? Date3? Date4? Date5

0? ?Juan? ? ? 0? ? ? 0? ? ? 1? ? ? 1? ? ? 1

1? ?Luis? ? ? 1? ? ? 1? ? ? 1? ? ? 1? ? ? 1

2? Maria? ? ? 0? ? ? 1? ? ? 1? ? ? 1? ? ? 1

3? Laura? ? ? 0? ? ? 0? ? ? 0? ? ? 1? ? ? 1

4? ?Lina? ? ? 0? ? ? 0? ? ? 0? ? ? 0? ? ? 1


print(df2)

? ? Name? Date1? Date2? Date3? Date4? Date5

0? ?Juan? ? ? 0? ? ? 0? ? ? 1? ? ? 0? ? ? 0

1? ?Luis? ? ? 1? ? ? 0? ? ? 0? ? ? 0? ? ? 0

2? Maria? ? ? 0? ? ? 1? ? ? 0? ? ? 0? ? ? 0

3? Laura? ? ? 0? ? ? 0? ? ? 0? ? ? 1? ? ? 0

4? ?Lina? ? ? 0? ? ? 0? ? ? 0? ? ? 0? ? ? 1


查看完整回答
反對 回復 2023-05-23
  • 1 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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