python - 对特定行应用列减法

标签 python python-3.x pandas dataframe

我有一个数据框:

import pandas as pd 
df = pd.DataFrame({'col_A':[1,0,3], 'col_B':[2,0,1]})

我需要找到行中元素总和大于 0 的行的列差异。

null_index = df[df.sum(axis=1)==0].index
df['col_B'] = (df.loc[~df.index.isin(null_index),'col_B']-df.loc[~df.index.isin(null_index),'col_A'])/df.loc[~df.index.isin(null_inde),'col_A']

我得到一个形状为 (2,1) 的 DataFrame,但我需要 (3,1),但对于第二行什么也不会发生

最佳答案

您可以使用df.mask在行总和大于 0 的地方屏蔽 col_B

df.col_B.mask(df.sum(1) > 0, df.col_B - df.col_A, inplace=True)

df
#        col_A  col_B
# 0      1      1
# 1      0      0
# 2      3     -2

或者在不使用索引信息df.mask的情况下执行相同的操作可能会更慢。

df.loc[df.sum(1) > 0, 'col_B'] = df.col_B - df.col_A 

关于python - 对特定行应用列减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50889997/

相关文章:

python - 如何在 Python 中为 for 循环中的某些数据分配图例?

python - Pandas 将数字四舍五入为 0

class - Python 3.4 - 如何为多个类创建模板属性

python - 值错误: too many values to unpack (expected 2

python - 是否可以为数据框的每一列创建一个额外的 pct_change 列?

python - pandas:规范化 DataFrame

python - 如何在生成的线程中捕获内存错误?

python - Selenium chrome headless 并行实例 python 的最佳方式

python - 为什么我在 OS X Python 3.4 上得到 "SyntaxError:"?

python - Pandas 根据字典中描述的关系加入两个数据框