选择索引的熊猫反转标志

时间:2017-05-28 04:56:08

标签: python pandas

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

Sample Data

如何转换数据以便:

  • 收入行未更改
  • 其他行的值将被反转,即乘以-1

2 个答案:

答案 0 :(得分:3)

difference的所有行mul使用to_series

cols = df.index.difference(['Revenue'])
df.loc[cols] = df.loc[cols].mul(-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

map + numpy.where的多个人创建了另一个解决方案Series

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

或者简化使用mul通过掩码使用{{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

答案 1 :(得分:1)

使用@ 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数组。直接在底层values数组上操作。这非常快。

当索引值为Revenue时,我们得到True,否则为False。乘以22等于Revenue,否则为0。减去11Revenue时我们会-1。现在我们只需要将它乘以values数组中的每一列。我们使用numpy广播。为了进行广播,我们将-11的1d数组转换为带有[:, None]的n x 1数组。现在我们可以将每一列相乘。

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