所选索引的 Pandas 反转符号

ida*_*ika 3 python pandas

在我下面参考该指数的数据中,收入为正值,而成本,即直接成本、人力、供应和材料、其他运营成本,按照财务惯例为负值。

样本数据

如何转换数据,以便:

  • 收入行不变
  • 其他行将反转它们的值,即乘以 -1

jez*_*ael 5

使用difference了由地方需要多所有行mul

cols = df.index.difference(['Revenue'])
df.loc[cols] = df.loc[cols].mul(-1)
Run Code Online (Sandbox Code Playgroud)

样本:

df = pd.DataFrame({'A':[1,2,3],
                   'B':[-4,5,6],
                   'C':[7,-8,9],
                   'D':[1,3,-5],
                   'E':[5,-3,6],
                   'F':[-7,4,3]}, 
                   index=['Revenue', 'Direct Cost','Manpower'])

print (df)
             A  B  C  D  E  F
Revenue      1 -4  7  1  5 -7
Direct Cost  2  5 -8  3 -3  4
Manpower     3  6  9 -5  6  3

cols = df.index.difference(['Revenue'])
df.loc[cols] = df.loc[cols].mul(-1)
print (df)
             A  B  C  D  E  F
Revenue      1 -4  7  1  5 -7
Direct Cost -2 -5  8 -3  3 -4
Manpower    -3 -6 -9  5 -6 -3
Run Code Online (Sandbox Code Playgroud)

Series使用to_series+为多个创建另一个解决方案map

s = (df.index.to_series() == 'Revenue').map({True:1, False:-1})
print (s)
Revenue        1
Direct Cost   -1
Manpower      -1
dtype: int64

df = df.mul(s, axis=0)
print (df)
             A  B  C  D  E  F
Revenue      1 -4  7  1  5 -7
Direct Cost -2 -5  8 -3  3 -4
Manpower    -3 -6 -9  5 -6 -3
Run Code Online (Sandbox Code Playgroud)

或者更简单地numpy.where用于通过掩码转换数组mul

df = df.mul(np.where(df.index == 'Revenue', 1, -1), axis=0)
print (df)
             A  B  C  D  E  F
Revenue      1 -4  7  1  5 -7
Direct Cost -2 -5  8 -3  3 -4
Manpower    -3 -6 -9  5 -6 -3
Run Code Online (Sandbox Code Playgroud)