簡體   English   中英

如何檢查 Pandas dataframe 的一行是否有一個具有特定值的單元格,以及它是否修改了最后一個單元格?

[英]How to check if a row of a Pandas dataframe has a cell with a specific value and if it does modify the last cell?

我有一個 dataframe df

姓名 年齡_5_9 年齡_10_14 年齡_15_19
愛麗絲 沒有骨折 沒有骨折 斷了 1 根骨頭
鮑勃 沒有骨折 斷了 2 根骨頭 沒有骨折
查爾斯 沒有骨折 沒有骨折 沒有骨折

當任何行在任何列age_5_9age_10_14age_15_19中具有值 'broke 1 bone' 或 'broke 2 bone' 時,我想創建一個為1的列broke_a_bone 否則應該為0。

它應該如下所示:

姓名 年齡_5_9 年齡_10_14 年齡_15_19 破骨
愛麗絲 沒有骨折 沒有骨折 斷了 1 根骨頭 1
鮑勃 沒有骨折 斷了 2 根骨頭 沒有骨折 1
查爾斯 沒有骨折 沒有骨折 沒有骨折 0

我嘗試使用.iterrows.apply()但我似乎無法讓它工作。

提前致謝。

您可以使用filter到 select “年齡”列,然后檢查每行是否有any值不是( ne )“沒有骨折”。

將生成的 boolean 轉換為 0/1 的 integer:

df['broke_a_bone'] = (df.filter(like='age_').ne('no bones broken')
                        .any(axis=1).astype(int)
                     )

output:

      name          age_5_9        age_10_14        age_15_19  broke_a_bone
0    Alice  no bones broken  no bones broken     broke 1 bone             1
1      Bob  no bones broken    broke 2 bones  no bones broken             1
2  Charles  no bones broken  no bones broken  no bones broken             0

我建議將所有內容都轉換為數字:

age_cols = df.filter(like='age').columns

df[age_cols] = df[age_cols].apply(lambda x: pd.to_numeric(x.str.replace('\D', '', regex=True)).fillna(0).astype(int))

print(df)

Output:

      name  age_5_9  age_10_14  age_15_19
0    Alice        0          0          1
1      Bob        0          2          0
2  Charles        0          0          0

現在,我們可以輕松地對行求和!

df['num_broken'] = df[age_cols].sum(axis=1)

print(df)

# Output:

      name  age_5_9  age_10_14  age_15_19  num_broken
0    Alice        0          0          1           1
1      Bob        0          2          0           2
2  Charles        0          0          0           0

你可以使用 np.where (更快)


a1 = df["age_5_9"].isin(['broke 1 bone', 'broke 2 bones'])
a2 = df["age_10_14"].isin(['broke 1 bone', 'broke 2 bones'])
a3 = df["age_15_19"].isin(['broke 1 bone', 'broke 2 bones'])

df['broke_a_bone'] = np.where((a1|a2|a3), 1, 0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM