我有一个数据框:
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)
答案 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