簡體   English   中英

基於 pandas 中的現有列創建新列

[英]Creating new column based on existing column in pandas

我有一個如下給出的數據框:

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 是預期的 output:

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

接下來我可以嘗試什么?

通過Series.str.contains測試子字符串並將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

您可以使用df['Class'].str.contains('PE5->')創建一個 'Final' 列,然后使用 .loc 查找 Class 包含 'PE5->' 的行,然后設置'Final' 中對應的值為 1

df['Final'] = 0
df.loc[df['Class'].str.contains('PE5->'), 'Final'] = 1

Output:

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

Output:

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

另一種有趣的方法是使用replace

df['Final'] = df['Class'].replace(['PE5.*SC', '.'], [1, 0], regex=True)

Output:

ID1 ID2 年月 Class 最后
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

暫無
暫無

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

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