我有一个数据框:
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/