对 v2 列分组,映射成分组 ID 列,然后做平均值统计便可。
请参考以下代码
'''
按区间对某列做分组,然后统计各组的另一列的平均值。
author: 李毅
'''
import numpy as np
import pandas as pd
df = pd.DataFrame([
[0.1, 1],
[0.2, 2],
[0.3, 3],
[0.4, 4],
[0.5, 5],
[0.6, 6],
], columns=['v1', 'v2'])
# 对列 v2 分组。
# 除了 np.histogram ,还可以用等距法等分区间,这取决于你的业务需求。
ranges = np.histogram(df.v2.values, 3)[1]
def tag_v2(value, ranges):
''' 用分组 ID 对 v2 值做标签。 '''
for i in range(len(ranges) - 1):
if value >= ranges[i] and value <= ranges[i+1]:
return i
return -1
# 添加 v2 标签列。
df['v2_tag'] = df.v2.apply(lambda i: tag_v2(i, ranges))
print df
输出结果
v1 v2 v2_tag
0 0.1 1 0
1 0.2 2 0
2 0.3 3 1
3 0.4 4 1
4 0.5 5 2
5 0.6 6 2
统计平均值
print df.groupby('v2_tag')['v1'].mean()
输出结果
v2_tag
0 0.15
1 0.35
2 0.55
Name: v1, dtype: float64