我怎样才能从Pandas后面的列中减去?

j5fpnvbx  于 2023-03-06  发布在  其他
关注(0)|答案(2)|浏览(116)

我怎样才能不硬编码的情况下从自己之前的列中减去很多列呢?我可以通过硬编码来实现,如下所示:

import pandas as pd
df = pd.DataFrame({"a":[1,2,3,4],"b":[1,3,5,6],"c":[6,7,8,9]})

df['a_diff'] = df['a']-16
df['b_diff'] = df['b']-df['a']
df['c_diff'] = df['c']-df['b']

我知道有一种方法可以通过移位函数来实现行方式。我们可以将其作为列方式吗?我需要对100列使用此技术,所以我宁愿使用Python方法而不是硬编码。请注意,“a_diff”是故意从常量中减去的,因为我也必须在代码中通过常量减去该列。
谢谢你,
山姆

bvhaajcl

bvhaajcl1#

使用diffcombine_first(或fillna,但有一些限制!),然后使用add_suffixjoin重命名为原始DataFrame:

out = df.join(df.diff(axis=1).combine_first(df[['a']].sub(16)).add_suffix('_diff'))

或者,如果您确定除“a”以外的列中没有NaN:

out = df.join(df.diff(axis=1).fillna(df['a'].sub(16)).add_suffix('_diff'))

输出:

a  b  c  a_diff  b_diff  c_diff
0  1  1  6   -15.0       0       5
1  2  3  7   -14.0       1       4
2  3  5  8   -13.0       2       3
3  4  6  9   -12.0       2       3
qzwqbdag

qzwqbdag2#

使用DataFrame.diff,第一列设置为DataFrame.fillnaDataFrame.add_suffix,最后一列附加到原始列的设置为DataFrame.join

df = df.join(df.diff(axis=1).fillna({'a': df['a'].sub(16)}).add_suffix('_diff'))

未指定第一列硬编码的解决方案:

first  = df.columns[0]
df = df.join(df.diff(axis=1).fillna({first: df[first].sub(16)}).add_suffix('_diff'))

或按差值设置第一列:

df1 = df.diff(axis=1)
df1.iloc[:, 0] = df.iloc[:, 0].sub(16)
df = df.join(df1.add_suffix('_diff'))

原始DataFrame中不存在缺失值时的解决方案:
一个三个三个一个

相关问题