如果DataFrame包含特定的字符串,请创建新列

时间:2020-01-08 19:44:37

标签: python pandas

我在column中有一个DataFrame是名字。在此名称中,有一些我要定位的模式,并在其他column的其他DataFrame中创建一个类别。例如:

Name 

name first RB LA a 
name LB second
RB name third
name LB fourth 

我希望具有相同模式的名称属于同一类别,并显示在另一列中

我想要的是:

       Name                  Example          

name first RB LA a          Round Blade category
name LB second              Long Biased category
RB name third               Round Blade category
name LB fourth              Long Biased category

我有一个DataFrame,而不是一个列表,其中还有其他几列。而且不仅有两个类别,而且有几个类别。

我尝试过的内容:

df.loc[df['Name']=="RB", 'Example'] = "RB category"

但是它不起作用,因为它必须完全匹配

另一种尝试:

if df[['Name'].str.contains("RB")] : 
    (...)

但是它给了我错误:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我试图添加到.bool().any()中,但是错误仍然存​​在或在运行该行时什么也没有发生。

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用pandas.Series.str.extract获得所需的输出


import numpy as np
import pandas as pd


df = pd.DataFrame({
    "Name": ["name first RB LA a", "name LB second", "RB name third", "name LB fourth"]
})
df["Example"] = df["Name"].str.extract("(LB|RB)")[0] + " category"

    Name                Example
0   name first RB LA a  RB category
1   name LB second      LB category
2   RB name third       RB category
3   name LB fourth      LB category

编辑

要在Example列中更改类别名称,请使用.str.replace

df["Example"] = (df["Example"]
 .str.replace("RB", "Round Blade")
 .str.replace("LB", "Long Biased")
)