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
并取每个分箱中项目数的平均值,如以下电子表格所示:
然后将平均值分配给新列中的相关类别:
非常感谢。
使用cut
和crosstab
:
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 可能会满足您对大多数事情的需求,并且现在是一个相当标准的模块。
我是 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
并取每个分箱中项目数的平均值,如以下电子表格所示:
然后将平均值分配给新列中的相关类别:
非常感谢。
使用cut
和crosstab
:
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 可能会满足您对大多数事情的需求,并且现在是一个相当标准的模块。