Python 分箱代码并取平均值

Python Binning code and taking average

我是 Python 的新手,正在努力解决以下问题。 我有以下数据框:

cat data
1   122.8099975
2   131.02
1   49.123999
2   122.5250015
3   40.86333217
2   61.40250025
2   122.5999985
3   35.02142771
3   246.320007
3   123.885002
3   61.942501
1   247.770004
1   123.885002

bins=array([  0,  20,  40,  60,  80, 100, 120, 140, 160, 180, 200, 220, 240, 260])

我想通过执行以下操作创建一个新列:

对于每个类别 ("cat"),将数据分箱到 bins 并取每个分箱中项目数的平均值,如以下电子表格所示:

然后将平均值分配给新列中的相关类别:

非常感谢。

使用cutcrosstab:

i = pd.cut(df.set_index('cat').data, bins=bins).reset_index()
j = pd.crosstab(i.data, i.cat)

cat         1  2  3
data               
(0, 20]     0  0  0
(20, 40]    0  0  1
(40, 60]    1  0  1
(60, 80]    0  1  1
(80, 100]   0  0  0
(100, 120]  0  0  0
(120, 140]  2  3  1
(140, 160]  0  0  0
(160, 180]  0  0  0
(180, 200]  0  0  0
(200, 220]  0  0  0
(220, 240]  0  0  0
(240, 260]  1  0  1

对于第二部分,使用mean,计算平均值,并使用map分配回df -

df['average'] = df['cat'].map(j.mean())
df

    cat        data   average
0     1  122.809998  0.307692
1     2  131.020000  0.307692
2     1   49.123999  0.307692
3     2  122.525001  0.307692
4     3   40.863332  0.384615
5     2   61.402500  0.307692
6     2  122.599999  0.307692
7     3   35.021428  0.384615
8     3  246.320007  0.384615
9     3  123.885002  0.384615
10    3   61.942501  0.384615
11    1  247.770004  0.307692
12    1  123.885002  0.307692

我强烈建议您使用 numpy 包来进行此类统计分析。

然后您只需开始使用 numpy.histogram 对您的数据进行分箱,然后从那里继续提取其他统计信息。当然,对于更高级的 use-cases,可能需要使用 scipy 或 pandas 之类的东西,但是 numpy 可能会满足您对大多数事情的需求,并且现在是一个相当标准的模块。