我使用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的方式有区别吗?如何得到一个输出就像我总结一样?
答案 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;差异"不会很明确。