我是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
并获取每个分档中项目数的平均值,如这些电子表格所示:
然后将平均值分配给新列中的相关类别:
非常感谢提前。
答案 0 :(得分:2)
使用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
答案 1 :(得分:0)
我强烈建议您使用numpy包进行此类统计分析。
然后,您只需先使用numpy.histogram来分享数据,然后从那里开始提取其他统计信息。当然,对于更高级的用例,可能需要使用scipy或pandas之类的东西,但numpy可能满足您对大多数事物的需求,而且现在是一个相当标准的模块。