说我有一个DataFrame:
ds = pd.DataFrame(np.abs(randn(3, 4)), index=[1,2,3], columns=['A','B','C','Average'])
ds
A B C Average
1 1.099679 0.042043 0.083903 0.410128
2 0.268205 0.718933 1.459374 0.758887
3 0.680566 0.538655 0.038236 1.169403
如何用第1行中的平均值减去(并用结果替换)第一行中的A,B和C?
答案 0 :(得分:2)
一种相对简单的方法是使用sub
方法(我假设Average
始终是最后一列):
ds[ds.columns[:-1]].sub(ds.Average, axis=0)
执行以下操作:
ds[ds.columns[:-1]]
是一个DataFrame,其中包含Average
的最后一列(ds
)以外的所有内容。
.sub(ds.Average, axis=0)
从DataFrame中的相应行中减去Average
列中的行值。
要更改原始ds
,请务必将ds
的相关列重新绑定到值的新DataFrame:
ds[ds.columns[:-1]] = ds[ds.columns[:-1]].sub(ds.Average, axis=0)
答案 1 :(得分:1)
怎么样
ds['A'] = ds['A'] - ds['Average']
ds['B'] = ds['B'] - ds['Average']
ds['C'] = ds['C'] - ds['Average']
熊猫很容易就是这样!
哦,这适用于整个DF。你只希望它为第一排是对的吗?
ds.loc[1, 'A'] = ds.loc[1, 'A'] - ds.loc[1, 'Average']
ds.loc[1, 'B'] = ds.loc[1, 'B'] - ds.loc[1, 'Average']
ds.loc[1, 'C'] = ds.loc[1, 'C'] - ds.loc[1, 'Average']
或循环:
for col in ['A', 'B', 'C']:
ds.loc[1, col] = df.loc[1, col] - ds.loc[1, 'Average']
依旧......
如果您有数千列,那么只需:
for col in ds.columns:
ds[col] = ds[col] - ds['Average']