【问题标题】:Python: Create new column with condition and "contains"-StatementPython:使用条件和“包含”-语句创建新列
【发布时间】:2019-02-02 02:41:16
【问题描述】:

我想创建一个带有条件的字符串的新列。示例:

from pandas import DataFrame
GoT = {'Old_Group': ['Jon Snow', 'Sansa Stark','Arya Stark','Robb Stark','Theon Greyjoy' ]}
df = DataFrame(GoT,columns=['Old_Group'])

“New_Group”应检查“Old_Group”是否在任何位置包含字符串“Stark”并将其分配给例如“史塔克家族”。如果条件“contains = 'Stark'”不适合,则应将“new_group”分配给例如“其他”

在 SQL 中我会这样做:

Select Old_Group
,case when Old_Group like '%Stark%' then 'Stark Family' else 'other' end as New_Group
from df

谢谢

【问题讨论】:

  • 你也不想像那样导入熊猫。当你这样做时,你只从 pandas 导入一件事,即 DataFrame 函数。您最好导入完整的库以确保您可以进行所有 DataFrame 操作。

标签: python-3.x pandas


【解决方案1】:

您可以结合使用 np.where 和 str.contains 来执行此操作。基本上你不能做的是在有问题的列(在这种情况下是旧组)上应用 np.where 并检查字符串是否包含工作 Stark。

df['New Group'] = np.where(df['Old Group'].str.contains("Stark"), 'Stark Family', 'Other')

只需确保您的列 New Group 是字符串数据类型,并且您已将 numpy 作为包导入

【讨论】:

  • 而不是导入numpy使用pd.np
  • 编译器如何知道 np 是包?它会认为它完全是在调用其他东西。有风险的imo
  • 你能链接那个来源吗?我以前从未见过它,看起来很酷!
【解决方案2】:

如果名称 Stark 出现在 MacStark 之类的名称中,则此选项将忽略它。而且不区分大小写

df.assign(New_Column=df.replace({r'(?i)^((?!\bStark\b).)*$':'Other',r'(?i)\bStark\b':'Stark Family'},regex=True))
Out[319]: 
       Old_Group          New_Column
0       Jon Snow               Other
1    Sansa Stark  Sansa Stark Family
2     Arya Stark   Arya Stark Family
3     Robb Stark   Robb Stark Family
4  Theon Greyjoy               Other

【讨论】:

  • 有点矫枉过正,但我​​喜欢它,从来不是开始使用正则表达式的好时机。
【解决方案3】:

你需要:

df['New_Group'] = df['Old_Group'].apply(lambda x : 'Stark Family' if 'Stark' in x else 'other')

print(df)

输出

      Old_Group New_Group                                                                                                                     
0       Jon Snow     other                                                                                                                     
1    Sansa Stark     Stark Family                                                                                                                    
2     Arya Stark     Stark Family                                                                                                                    
3     Robb Stark     Stark Family                                                                                                                    
4  Theon Greyjoy     other

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多