分组统计是数据分析中较为复杂的一种操作,但是使用起来非常有用,能避开大量的循环等等。
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True,group_keys=True, squeeze=False, **kwargs)
对DataFrame或者series进行分组统计;by为DataFrame中的某一列;as_index表示为
1. 以某一列为参照物对另一列进行分组统计
对data1按照key1进行分组,然后求均值:
# -*- coding: utf-8 -*-
""" 数据聚合与分组技术, 利用Python进行数据分析
1. groupby;
"""
import pandas as pd
import numpy as np
np.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)
})
# 按key1分组, 计算data1列的平均值
key1 = df["data1"].groupby(df["key1"]).mean()
# 语法糖为
key1 = df.groupby(["key1"])["data1"].mean()
2. 以某几列为参照物对另一列进行分组统计
# -*- coding: utf-8 -*-
""" 数据聚合与分组技术, 利用Python进行数据分析
1. groupby;
"""
import pandas as pd
import numpy as np
np.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)
})
# 按照key1, key2分组, 对data1列计数
key12 = df["data1"].groupby([df["key1"], df["key2"]]).count().unstack()
3. 以任意数组为分组键对另一列进行分组统计
以一个数组来对某一列进行分组统计。
# -*- coding: utf-8 -*-
""" 数据聚合与分组技术, 利用Python进行数据分析
1. groupby;
"""
import pandas as pd
import numpy as np
np.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)
})
# 以任意数组为分组键
arr = np.array([1993, 1994, 1993, 1996, 1996])
keyArr = df["data1"].groupby(arr).count()
4. 对分组进行迭代
对象经过groupby之后是可以迭代的。
# -*- coding: utf-8 -*-
""" 数据聚合与分组技术, 利用Python进行数据分析
1. groupby;
"""
import pandas as pd
import numpy as np
np.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)
})
# 对分组进行迭代
for name,group in df.groupby("key1"):
print(name, group)
5. agg的应用
可以对groupby的结果,同时应用多个函数;可以对groupby的结果更正列名。
""" agg数据聚合 """
key1 = df.groupby(["key1"], as_index=False)["data1"].agg({"aa" : "count"})
参考文献
http://jingyan.baidu.com/article/adc8151358a781f723bf73c4.html
http://jingyan.baidu.com/article/d45ad148947fd369552b80f6.html