Pandas - groupby-agg 分组统计
分组统计是数据分析中较为复杂的一种操作,但是使用起来非常有用,能避开大量的循环等等。
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True,group_keys=True, squeeze=False, **kwargs)
以某一列为参照物对另一列进行分组统计
对data1按照key1进行分组,然后求均值:
""" 数据聚合与分组技术, 利用Python进行数据分析 1. groupby; """
import pandas as pd
import numpy as npnp.random.seed(1)""" 1. groupby, 按键拆分, 重组, 求和 """
df = pd.DataFrame({
"key1": ["a", "a", "b", "b", "a"],"key2": ["one", "two", "one", "two", "one"],"data1": np.random.randn(5),"data2": np.random.randn(5)})
print(df)
# 按key1分组, 计算data1列的平均值
df.groupby('key1')['data1'].mean()
key1 key2 data1 data2
0 a one 1.624345 -2.301539
1 a two -0.611756 1.744812
2 b one -0.528172 -0.761207
3 b two -1.072969 0.319039
4 a one 0.865408 -0.249370key1
a 0.625999
b -0.800570
Name: data1, dtype: float64
以某几列为参照物对另一列进行分组统计
# 按照key1, key2分组, 对data1列计数
print(df)
df.groupby(['key1','key2'])['data1'].count()
key1 key2 data1 data2
0 a one 1.624345 -2.301539
1 a two -0.611756 1.744812
2 b one -0.528172 -0.761207
3 b two -1.072969 0.319039
4 a one 0.865408 -0.249370key1 key2
a one 2two 1
b one 1two 1
Name: data1, dtype: int64
以任意数组为分组键对另一列进行分组统计
# 以任意数组为分组键
print(df)
arr = np.array([1993, 1994, 1993, 1996, 1996])keyArr = df["data1"].groupby(arr).count()
keyArr
key1 key2 data1 data2
0 a one 1.624345 -2.301539
1 a two -0.611756 1.744812
2 b one -0.528172 -0.761207
3 b two -1.072969 0.319039
4 a one 0.865408 -0.2493701993 2
1994 1
1996 2
Name: data1, dtype: int64
agg的应用
可以对groupby的结果,同时应用多个函数;可以对groupby的结果更正列名。
""" agg数据聚合 """
key1 = df.groupby(['key1'],as_index=False)['data1'].agg({
'data':'count'})
key1
key1 | data | |
---|---|---|
0 | a | 3 |
1 | b | 2 |
骚话时间:事实易改,有几人能初心不渝,真心不负。