Pandas 数学运算,以列值为条件

2023-12-08

我需要进行一个数学运算,该运算以第二列中的值为条件。这是设置。

给定一个简单的数据框(df):

df = pd.DataFrame({
    'col1' : ['A', 'A', 'B', np.nan, 'D', 'C'],
    'col2' : [2, 1, 9, 8, 7, 4],
    'col3': [0, 1, 9, 4, 2, 3],
    })

In [11]: df
Out[11]: 
  col1  col2  col3
0    A     2     0
1    A     1     1
2    B     9     9
3  NaN     8     4
4    D     7     2
5    C     4     3

我可以添加一个新列(math),然后用基于 10 和 10 之和的数学表达式填充它col3.

df['math'] = 10 + df['col3']

In [14]: df
Out[14]: 
  col1  col2  col3  math
0    A     2     0    10
1    A     1     1    11
2    B     9     9    19
3  NaN     8     4    14
4    D     7     2    12
5    C     4     3    13

但我不知道如何使表达式以另一列中的值为条件(例如,仅当col1 == B)。期望的输出是:

In [14]: df
Out[14]: 
  col1  col2  col3  math
0    A     2     0   NaN
1    A     1     1   NaN
2    B     9     9    19
3  NaN     8     4   NaN
4    D     7     2   NaN
5    C     4     3   NaN

为了补充说明,我将使用一个变量col1值在一个for loop。结果我没能得到.group_by()按照描述工作here or here。我想我正在寻找这样的东西......

df['math'] = 10 + df.loc[[df['col1'] == my_var], 'col3']

这是我从上面第二个例子中的评论中得到的 - 但我无法让它工作。它抛出一个ValueError对于太多值 - 也就是说,我试图将过滤器和操作列一起传递,但它只期望过滤器。ThisSO帖子还使用了.loc类似于我上面的表达 - 但有一个静态col1.


Using loc

df['math'] = df.loc[df.col1.eq('B'), 'col3'].add(10)

  col1  col2  col3  math
0    A     2     0   NaN
1    A     1     1   NaN
2    B     9     9  19.0
3  NaN     8     4   NaN
4    D     7     2   NaN
5    C     4     3   NaN
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 数学运算,以列值为条件 的相关文章

随机推荐