Python 所选索引的反转符号
在我下面提到的指数数据中,收入为正值,而成本,即直接成本、人力、物资和其他运营成本,按照财务惯例为负值 如何转换数据,以便:Python 所选索引的反转符号,python,pandas,Python,Pandas,在我下面提到的指数数据中,收入为正值,而成本,即直接成本、人力、物资和其他运营成本,按照财务惯例为负值 如何转换数据,以便: 收入行保持不变 其他行的值将被反转,即乘以-1 用于所有需要的行: 样本: df = pd.DataFrame({'A':[1,2,3], 'B':[-4,5,6], 'C':[7,-8,9], 'D':[1,3,-5],
- 收入行保持不变
- 其他行的值将被反转,即乘以-1
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
另一个解决方案是使用+,为多个应用程序创建Series
:
或更简单地用于通过掩码转换数组,包括:
使用@jezrael的设置
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'])
从布尔数组构建-1
/+1
数组。直接对基础值
数组进行操作。这是非常快的
当索引值为Revenue
时,我们得到True
,否则False
。将其乘以2
,当等于Revenue
时,我们得到2
,否则0
。减去1
,当Revenue
时,我们得到1
,否则-1
。现在我们只需要将它乘以values数组中的每一列。我们使用numpy广播。为了进行广播,我们将-1
和1
的1d数组转换为[:,None]
的nx1数组。现在我们可以将每一列相乘
df.values[:] *= ((df.index.values == 'Revenue') * 2 - 1)[:, None]
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
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
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'])
df.values[:] *= ((df.index.values == 'Revenue') * 2 - 1)[:, None]
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