Pandas如何处理聚合函数sum与diff

时间:2016-07-17 23:57:09

标签: python pandas

我使用python和pandas,我的数据集看起来像:

                            District             Race/Ethnicity      Value 
3   Achievement First Academy District  Black or African American    30.0   
4   Achievement First Academy District  White                         0.0  
10  Amistad Academy District            Black or African American    40.5      
11  Amistad Academy District            White                        23.1  

所以,如果我想分组并按每个区的总和排序。我只需要做以下事情:

df= df.groupby('District')
df = abs(df.sum()).sort_values('Value', ascending=False)

我完全得到了我想要的东西:

District                                    Value                                                 
Achievement First Academy District           30.0
Amistad Academy District                     63.6

但是说我想要在每个区域内区别。我做了以下事情:

df= df.groupby('District')
df = abs(df.diff()).sort_values('Value', ascending=False)

我的输出完全不同于我的总和。我明白了:

    Value
4   30.0
10  17.4

我真的是输出,就像我使用sum一样。 Pandas处理sum和diff的方式有区别吗?如何得到一个输出就像我总结一样?

1 个答案:

答案 0 :(得分:0)

sum所有元素汇总为一个数字。 diff获取元素与元素之间的差异(复数),并返回所有元素的序列。您认为它们是并行的,因为您的组只有两个元素,但通常它们根本不是平行的。这是一个简单的例子:

>>> x = pandas.Series([5, 4, 3, 2, 1])
>>> x.sum()
15
>>> x.diff()
0   NaN
1    -1
2    -1
3    -1
4    -1
dtype: float64

如果你知道你想要的差异总是第一个元素减去每个组中的第二个元素,那么你可以这样做:

g = df.groupby('District')
new_df = g.Value.apply(lambda x: x.iloc[1] - x.iloc[0]).sort_values(ascending=False)

但是,如果你的学校有两个以上的种族群体,那么你必须重新考虑你想要计算的东西,因为在那种情况下,#34;差异"不会很明确。