根据多个条件选择填充数据框列

时间:2016-07-18 12:52:03

标签: python pandas

我有一个数据框data,如下所示:

Holiday  Report   Action     Power
0             0        0     1.345
0             0        0     1.345
1             0        0     0
0             0        0     1.345
0             0        0     1.345
0             1        0     0
0             0        0     1.345
0             1        1     0
0             0        0     1.345
0             0        1     0

列'假日','报告'和'操作'被拉入。通过查看其他一些数据列来计算功率。我正在寻找一行代码,如果任何列'假日','报告'或'操作'设置为1,我可以将功率设置为零。

我可以一次一列地执行此程序:

data.loc[staticidx, "power"] = np.where(dayData.Holiday = 1, 0, (a - b)/(c-1))
data.loc[staticidx, "power"] = np.where(dayData.Report= 1, 0, (a - b)/(c-1))
data.loc[staticidx, "power"] = np.where(dayData.Actions= 1, 0, (a - b)/(c-1))

但是有没有办法将它们组合成一个像OR语句一样的函数?

非常感谢

2 个答案:

答案 0 :(得分:3)

您可以通过切片对行进行子选择,与1进行比较并使用any和param axis=1并创建一个布尔掩码,传递给loc以仅设置满足条件的行1根据需要:

In [23]:
df.loc[(df.ix[:,:'Action'] == 1).any(axis=1), 'Power'] = 1
df

Out[23]:
   Holiday  Report  Action  Power
0        0       0       0  1.345
1        0       0       0  1.345
2        1       0       0  1.000
3        0       0       0  1.345
4        0       0       0  1.345
5        0       1       0  1.000
6        0       0       0  1.345
7        0       1       1  1.000
8        0       0       0  1.345
9        0       0       1  1.000

答案 1 :(得分:1)

希望这有助于使用np.where

In[49]:df['Power']=np.where((df['Holiday']==1)|(df['Report']==1)|(df['Action']==1),1,df['Power'])

In[50]:df
Out[50]: 
   Holiday  Report  Action  Power
0        0       0       0  1.345
1        0       0       0  1.345
2        1       0       0  1.000
3        0       0       0  1.345
4        0       0       0  1.345
5        0       1       0  1.000
6        0       0       0  1.345
7        0       1       1  1.000
8        0       0       0  1.345
9        0       0       1  1.000