2012-11-28 18 views
2

我有一个熊猫pivot_table,它将两列中的两个数据集合在几行中。我想添加另一列,即按行存在两个现有列中的聚合值之间的差异。有没有办法直接在pivot_table()调用中实现这一点?我知道返回的枢轴是一个数据框,所以我可以通过其他方式计算它,但只是好奇,如果有更有效的方法。我的数据Python中的列差异数据透视表

简单的例子:

Set  Type Val 
    S1  A  1 
    S1  B  2 
    S1  B  3 
    S2  A  4 
    S2  B  5 
    S2  C  6 

使用下面的代码,数据是我的DF

piv=pivot_table(data,'Val',rows='Type',cols='Set',aggfunc=sum,fill_value=0.0) 

我得到以下

S1 S2 
A 1 4 
B 5 5 
C 0 6 

我想输出be

S1 S2 Diff 
A 1 4 3 
B 5 5 0 
C 0 6 6 

或只是

Diff 
A 3 
B 0 
C 6 

回答

5

容易。数据框(通常是矩阵)可以轻松地一次处理多个元素。

定义您想应用的功能。

>>> def abs_diff(x, y): 
>>>  return abs(x - y) 

然后,应用它。

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

>>> df 

    S1 S2 Diff 
A 1 4  3 
B 5 5  0 
C 0 6  6 

和当然,如果你只是想呈现特定列: -

>>> df['Diff'] 

A 3 
B 0 
C 6 
Name: Diff 

>>>当然是蟒蛇shell提示符)

+0

谢谢,我结束了做类似的事情。想知道熊猫枢轴是否有类似的内置功能。 – MattB