pandas:如果满足3列条件,则更新值

时间:2014-01-21 15:57:12

标签: python pandas

我有一个这样的数据框:

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

4 个答案:

答案 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'