Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 所选索引的反转符号_Python_Pandas - Fatal编程技术网

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