在我下面参考该指数的数据中,收入为正值,而成本,即直接成本、人力、供应和材料、其他运营成本,按照财务惯例为负值。
如何转换数据,以便:
使用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)
| 归档时间: |
|
| 查看次数: |
3178 次 |
| 最近记录: |