我有一个数据框:
Color Name Age City Value
Blue Bob 28 Atl 0
Green Bob 27 Chi 0
Blue Sam 28 Atl 0
我有上面的DF,并且如果颜色是蓝色,年龄是28,城市是Atl,我希望所有值都等于1。
我尝试使用df.loc,但出现一条错误消息,指出“索引器太多”
答案 0 :(得分:1)
这将起作用
df.loc[(df.Color=='Blue')&(df.Age==28)&(df.City=='Atl'),'Value']=1
df
Out[687]:
Color Name Age City Value
0 Blue Bob 28 Atl 1
1 Green Bob 27 Chi 0
2 Blue Sam 28 Atl 1
答案 1 :(得分:1)
对于这些问题,我通常默认使用np.select
,以便创建复杂的条件,并以清晰且可扩展的方式设置输出。
首先,创建您的条件(根据需要创建尽可能多的条件):
p1 = df.Color.eq('Blue')
p2 = df.Age.eq(28)
p3 = df.City.eq('Atl')
condition = p1 & p2 & p3
现在使用numpy.select
,传递条件列表,匹配输出列表和默认值:
df.assign(Value=np.select([condition], [1], df.Value))
Color Name Age City Value
0 Blue Bob 28 Atl 1
1 Green Bob 27 Chi 0
2 Blue Sam 28 Atl 1
如果您实际上只有一种情况,也可以在此处使用numpy.where
:
np.where(condition, 1, df.Value)
# array([1, 0, 1], dtype=int64)
答案 2 :(得分:0)
您可以将np.where
与多个条件语句一起使用。如果您拥有原始数据框,则可以执行以下代码
import numpy as np
df['value'] = np.where((df['Color'] == 'Blue') & (df['Age'] == 28) & (df['City'] == 'Atl'), 1, 0)
屈服
Color Name Age City Value
Blue Bob 28 Atl 1
Green Bob 27 Chi 0
Blue Sam 28 Atl 1
很显然,您可以根据需要/需要更改条件,甚至可以使用相同的技术创建其他列。