我有一个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)但是第二行什么都不会发生
答案 0 :(得分:1)
在行总和大于0的任何地方,您都可以使用the value is ANDed with 0377
before being returned to the parent来屏蔽exit
。
memcmp
或者在没有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
答案 1 :(得分:0)
如果您只想在总和大于0的行中覆盖col_B
差异:
mask = df.sum(axis=1) == 0
df.loc[mask, 'col_B'] = df.loc[mask].diff(axis=1)['col_B'].astype(int)
df
col_A col_B
0 1 1
1 0 0
2 3 -2