python - 多个系列与另一个系列的条件乘法

标签 python pandas numpy dataframe

我想根据第三列中的条件,将 DataFrame 的一列中的值乘以另一列中的值(就地)。例如:

data = pd.DataFrame({'a': [1, 33, 56, 79, 2], 'b': [9, 12, 14, 5, 5], 'c': np.arange(5)})
data.loc[data.a > 10, ['a', 'b']] *= data.loc[data.a > 10, 'c']

我想要做的是根据条件将“a”和“b”的值乘以“c”中相应的(同一行)值。但是,上面的代码只会导致所需范围内的 NaN 值。

我发现最接近的解决方法是这样做:

data.loc[data.a > 10, ['a', 'b']] = (data.loc[data.a > 10, ['a', 'b']].as_matrix().T * data.loc[data.a > 10, 'c']).T

这行得通,但似乎我缺少一种更好的(更 Pythonic 的)方式。

最佳答案

你可以使用mul(..., axis=0)方法:

In [122]: mask = data.a > 10

In [125]: data.loc[mask, ['a','b']] = data.loc[mask, ['a','b']].mul(data.loc[mask, 'c'], 0)


In [126]: data
Out[126]:
     a   b  c
0    1   9  0
1   33  12  1
2  112  28  2
3  237  15  3
4    2   5  4

关于python - 多个系列与另一个系列的条件乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40495160/

相关文章:

python - 为 python3 创建一个别名

python - 我怎样才能用一系列的 Pandas 查找?

python - 使用 [key :value] combination in Python 将多列合并为一个列列表

python - 将 numpy 函数应用于对整个值进行操作的 pandas.Series 对象

python - Numpy:检查数组中的某个位是否设置为 1 或 0?

python - PyMsSQL 和 _MSSql 模块之间的区别是什么

python - 如何将数据读入 TensorFlow?

python - 使 runserver 命令与代码一起运行

python - 将字符串转换为时间 (H :M:S) so I can subtract them

python - 按值的前两个字符过滤值数组