我有一個如下給出的資料框:
ID1 ID2 Yr-Month Class
1 p1 Feb-19 PE5->SC
1 p2 Feb-19 SC
1 p3 Feb-19 EA->PE5
1 p4 Feb-19 EA->PE5->SC
1 p5 Feb-19 PC->PE5->SC
我需要在現有資料中創建一個名為 Final 的新列,如果從 PE5 到 SC 即 PE5->SC 以下列方式 PE5->SC、EA->PE5->SC、PC->PE5->SC Final 發生轉換列值必須是一個 else 下面給出的 0 是預期的輸出:
ID1 ID2 Yr-Month Class Final
1 p1 Feb-19 PE5->SC 1
1 p2 Feb-19 SC 0
1 p3 Feb-19 EA->PE5 0
1 p4 Feb-19 EA->PE5->SC 1
1 p5 Feb-19 PC->PE5->SC 1
請幫忙
uj5u.com熱心網友回復:
Series.str.contains通過和 for convert測驗子字串True/False以1/0將值轉換為整數:
df['Final'] = df['Class'].str.contains('PE5.*SC').astype(int)
替代numpy.where:
df['Final'] = np.where(df['Class'].str.contains('PE5.*SC'), 1, 0)
print (df)
ID1 ID2 Yr-Month Class Final
0 1 p1 Feb-19 PE5->SC 1
1 1 p2 Feb-19 SC 0
2 1 p3 Feb-19 EA->PE5 0
3 1 p4 Feb-19 EA->PE5->SC 1
4 1 p5 Feb-19 PC->PE5->SC 1
uj5u.com熱心網友回復:
另一種有趣的方法是使用replace
df['Final'] = df['Class'].replace(['PE5.*SC', '.'], [1, 0], regex=True)
輸出:
| ID1 | ID2 | 年月 | 班級 | 最終的 |
|---|---|---|---|---|
| 1 | p1 | 2月19日 | PE5->SC | 1 |
| 1 | p2 | 2月19日 | SC | 0 |
| 1 | p3 | 2月19日 | EA->PE5 | 0 |
| 1 | p4 | 2月19日 | EA->PE5->SC | 1 |
| 1 | p5 | 2月19日 | PC->PE5->SC | 1 |
uj5u.com熱心網友回復:
您可以創建一個 0s 的 'Final' 列,然后使用 .loc 查找 Class 包含 'PE5->' 的行df['Class'].str.contains('PE5->'),然后將 'Final' 中的相應值設定為 1
df['Final'] = 0
df.loc[df['Class'].str.contains('PE5->'), 'Final'] = 1
輸出:
ID1 ID2 Yr-Month Class Final
1 p1 Feb-19 PE5->SC 1
1 p2 Feb-19 SC 0
1 p3 Feb-19 EA->PE5 0
1 p4 Feb-19 EA->PE5->SC 1
1 p5 Feb-19 PC->PE5->SC 1
編輯: 看到 OP 對 Jezrael 的回答的評論后,原來的問題似乎缺少一個案例。涵蓋更新案例的代碼將是:
df['Final'] = 0
df.loc[df['Class'].str.contains('PE5->.*SC', regex=True), 'Final'] = 1
輸出:
ID1 ID2 Yr-Month Class Final
1 p1 Feb-19 PE5->SC 1
1 p2 Feb-19 SC 0
1 p3 Feb-19 EA->PE5 0
1 p4 Feb-19 EA->PE5->SC 1
1 p5 Feb-19 PE5->PC->SC 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466661.html
下一篇:使用loc和iloc熊貓設定值
