我有一个数据框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语句一样的函数?
非常感谢
答案 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