繁体   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