如何在python pandas dataframe中应用通配符?

时间:2019-05-03 06:48:59

标签: python pandas if-statement

我有一个数据框:

Car       Color 
BMW       WHITE
BMPrO     Black
Toyota    Green
Honda     Black

我希望创建一个基于Car列的列,如果Car列以BM *开头,则ID列将为A IF Car列以T开头,则ID列将为B否则C

期望的数据帧

Car       Color   ID
BMW       WHITE   A
BMPrO     Black   A
Toyota    Green   B
Honda     Black   C

有人有想法吗?

我尝试过此代码,但不适用于这种情况:

def f(row):
    if row['car']=='B*':
        val = A
    elif row['Car'] =='T*':
        val = B
    else:
        val = 'C'
    return val
df['ID'] = df.apply(f, axis=1)

3 个答案:

答案 0 :(得分:1)

尝试使用series.str.startswith()df.apply()创建2个条件,然后使用np.select()将条件置于选择之外:

m=df.apply(lambda x: x.str.startswith('BM')).any(axis=1)
n=df.apply(lambda x: x.str.startswith('T')).any(axis=1)

df['ID']=np.select([m,n],['A','B'],'C')
print(df)

      Car  Color ID
0     BMW  WHITE  A
1   BMPrO  Black  A
2  Toyota  Green  B
3   Honda  Black  C

答案 1 :(得分:0)

创建第三列,并为所有其他列设置为“ C”。

df['ID'] = 'C'

根据标准以BM和T开头的单词设置“ ID”的值

df.loc[df['Car'].str.startswith('BM'), 'ID'] = 'A'
df.loc[df['Car'].str.startswith('T'), 'ID'] = 'B'

       Car Color ID
0     BMW  WHITE  A
1   BMPrO  Black  A
2  Toyota  Green  B
3   Honda  Black  C

答案 2 :(得分:0)

您可以创建一个列表并将其作为“ ID”列添加到数据框中

df = pd.DataFrame({"Car": ['BMW','BMPro','Toyota','Honda'],"Color" : ['White','Black','Green','Black']})

df['ID'] = ['A' if x.startswith('BM') else 'B' if x.startswith('T') else 'C' for x in df['Car']]

    Car     Color   ID
0   BMW     White   A
1   BMPro   Black   A
2   Toyota  Green   B
3   Honda   Black   C