我有一个这样的数据框:
In[1]: df
Out[1]:
A B C D
1 blue red square NaN
2 orange yellow circle NaN
3 black grey circle NaN
我希望在满足3个条件时更新D列。例如:
df.ix[ np.logical_and(df.A=='blue', df.B=='red', df.C=='square'), ['D'] ] = 'succeed'
它适用于前两个条件,但它不适用于第三个条件,因此:
df.ix[ np.logical_and(df.A=='blue', df.B=='red', df.C=='triangle'), ['D'] ] = 'succeed'
具有完全相同的结果:
In[1]: df
Out[1]:
A B C D
1 blue red square succeed
2 orange yellow circle NaN
3 black grey circle NaN
答案 0 :(得分:24)
您可以尝试这样做:
df[ (df.A=='blue') & (df.B=='red') & (df.C=='square') ]['D'] = 'succeed'
答案 1 :(得分:4)
你可以尝试:
df['D'] = np.where((df.A=='blue') & (df.B=='red') & (df.C=='square'), 'succeed')
这个答案可能会为您的问题提供详细的答案: Update row values where certain condition is met in pandas
答案 2 :(得分:2)
logical_and的第三个参数是分配用于存储结果的数组。
目前,提供的@TimRich方法可能是最好的。在pandas 0.13(开发中)中,有一种新的实验query方法。试试吧!
答案 3 :(得分:0)
在新的答案中可能暗含了这种格式,但是以下内容对我来说确实有用。
df['D'].loc[(df['A'] == 'blue') & (df['B'] == 'red') & (df['C'] == 'square')] = 'succeed'