Python Pivot-Table中的列差异

Mat*_*ttB 3 python pivot-table pandas

我有一个pandas pivot_table,可以在两行中聚合2个数据集.我想添加另一列,即两行现有列中的聚合值之间的差异.有没有办法直接在pivot_table()调用中实现它?我知道返回的数据帧是一个数据帧,所以我可以通过其他方式计算它,但只是好奇是否有更有效的方法.

我的数据的简单示例:

  Set     Type   Val
  S1       A     1
  S1       B     2
  S1       B     3
  S2       A     4
  S2       B     5
  S2       C     6
Run Code Online (Sandbox Code Playgroud)

使用以下代码,其中数据是我的df

piv=pivot_table(data,'Val',rows='Type',cols='Set',aggfunc=sum,fill_value=0.0)
Run Code Online (Sandbox Code Playgroud)

我得到以下内容

    S1  S2
A   1   4
B   5   5
C   0   6
Run Code Online (Sandbox Code Playgroud)

我希望输出

    S1  S2 Diff
A   1   4   3
B   5   5   0
C   0   6   6
Run Code Online (Sandbox Code Playgroud)

要不就

   Diff
A   3
B   0
C   6
Run Code Online (Sandbox Code Playgroud)

Cal*_*eng 5

简单.数据帧(以及一般的矩阵)使得一次操作多个元素变得容易.

定义要应用的功能.

>>> def abs_diff(x, y):
>>>     return abs(x - y)
Run Code Online (Sandbox Code Playgroud)

然后,应用它.

>>> df['Diff'] = abs_diff(df['S1'], df['S2'])

>>> df

   S1  S2  Diff
A   1   4     3
B   5   5     0
C   0   6     6
Run Code Online (Sandbox Code Playgroud)

当然,如果您只想呈现特定列: -

>>> df['Diff']

A    3
B    0
C    6
Name: Diff
Run Code Online (Sandbox Code Playgroud)

(>>>当然是python shell提示符)