对pandas数据帧的每一列执行逻辑操作?

2024-05-18 22:14:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试根据每个行的所有其余列中验证的条件创建一个新的df列。在

df = pd.DataFrame([[1, 5, 2, 8, 2], [2, 4, 4, 20, 5], [3, 3, 1, 20, 2], [4, 2, 2, 1, 0], 
                  [5, 1, 4, -5, -4]],
                  columns=['a', 'b', 'c', 'd', 'e'],
                  index=[1, 2, 3, 4, 5])

我试过了:

^{pr2}$

但是我得到:

IndexingError: Unalignable boolean Series key provided

这是所需的输出:

    a   b   c   d   e   f
1   1   5   2   8   2   
2   2   4   4   20  5   15
3   3   3   1   20  2   12
4   4   2   2   1   0
5   5   1   4  -5  -4

Tags: columnskeydataframedfindex条件providedseries
3条回答

通过使用max

df['f'] = ""
df.loc[df.max(1)>=10,'f']=df.e+10


Out[330]: 
   a  b  c   d  e   f
1  1  5  2   8  2    
2  2  4  4  20  5  15
3  3  3  1  20  2  12
4  4  2  2   1  0    
5  5  1  4  -5 -4    

使用

In [984]: df.loc[(df >= 10).any(1), 'f'] = df['e']  + 10

In [985]: df
Out[985]:
   a  b  c   d  e     f
1  1  5  2   8  2   NaN
2  2  4  4  20  5  15.0
3  3  3  1  20  2  12.0
4  4  2  2   1  0   NaN
5  5  1  4  -5 -4   NaN

请注意:

df.any()
a    True
b    True
c    True
d    True
e    True
f    True
dtype: bool

df.any() >= 10
a    False
b    False
c    False
d    False
e    False
f    False
dtype: bool

我假设您想检查列中是否有任何值是>= 10。这可以用(df >= 10).any(axis=1)完成。在


您应该能够使用np.where一步完成此操作:

^{pr2}$

如果您希望使用NaNs而不是空格,请使用:

df['f'] = np.where((df >= 10).any(axis=1), df.e + 10, np.nan)   
df
   a  b  c   d  e     f
1  1  5  2   8  2   NaN
2  2  4  4  20  5  15.0
3  3  3  1  20  2  12.0
4  4  2  2   1  0   NaN
5  5  1  4  -5 -4   NaN

相关问题 更多 >

    热门问题