python--pandas数据聚合和分组运算

groupby机制

1.通过列进行分组

访问列1,并根据列2和列3调用groupby,生成的是对象:

s=df['列1'].groupby([df['列2'],df['列3']])

求和:sums=s.sum()

sums.unstack()

或者:

df.groupby(['key1','key2']).sum()

df.groupby(['key1', 'key2']).size():返回一个含有分组大小的Series

2.通过字典或Series进行分组

groupby后面可以传递字典:

people = pd.DataFrame(np.random.rand(5, 5), columns=['a', 'b', 'c', 'd', 'e'], index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'] )

mapping = {'a': 'red', 'b': 'red', 'c': 'blue', 'd': 'blue', 'e': 'red', 'f': 'orange'}

people.groupby(mapping,axis=1).sum()

count() 计数

pd.Series()后也可传递字典

3.通过函数进行分组

people.groupby(len).sum()

函数跟数组、列表、字典、Series混合使用也可以

python--pandas数据聚合和分组运算_第1张图片

如果要使用自己的聚合函数,只需将其传入aggregate或agg方法(自定义函数)即可:

def peak_to_peak(arr):

return arr.max() - arr.min()

print(df.groupby().agg(peak_to_peak))

4.groupby对象支持迭代

for (k1, k2), group in df.groupby(['key1', 'key2']):

print((k1, k2))

print(group)

将数据片段做成字典:

pieces =dict(list(df.groupby('key1')))

print(pieces['b'])

你可能感兴趣的:(python,开发语言)