我有以下数据框
df2 = pd.read_csv('arangerr2.csv')
hgroup lowgroup value max_hg_value
0 A B 0 39
1 A B 18 39
2 A B 38 39
3 A C 0 39
4 A C 19 39
5 A C 39 39
我想使用 np.arange 和 pd.cut 计算按 lowgroup 分组的每个 20 值的中位数
start = 0
stop = df2['value'].max()
step = 20
bins = np.arange(start,stop + 10, step)
df2['bins'] = pd.cut(df['value']+1 , bins)
df2['mean'] = df2['value'].groupby(pd.cut(df2['value'], bins=bins,
right=False)).transform('mean')
df2
hgroup lowgroup value max_hg_value bins mean
0 A B 0 39 (0, 20] 9.25
1 A B 18 39 (0, 20] 9.25
2 A B 38 39 (20, 40] 38.50
3 A C 0 39 (0, 20] 9.25
4 A C 19 39 (0, 20] 9.25
5 A C 39 39 (20, 40] 38.50
这似乎完美地完成了工作。但是,它似乎只有在停止值只有一个值或固定时才起作用。如果我们有多个具有不同低组和不同最大值的 hgroup,我们如何解决这个问题。
我们需要做什么才能摆脱这种局面
Hgroup LowGoup Value Max_HG_value
0 A B 0 39
1 A B 18 39
2 A B 38 39
3 A C 0 39
4 A C 19 39
5 A C 39 39
6 B D 0 50
7 B D 17 50
8 B D 34 50
9 B D 55 50
10 B E 0 50
11 B E 14 50
12 B E 22 50
13 B E 50 50
14 C F 0 69
15 C F 10 69
16 C F 25 69
17 C F 50 69
18 C F 65 69
19 C G 0 69
20 C G 9 69
21 C G 30 69
22 C G 48 69
23 C G 69 69
到这个
Hgroup LowGoup Value Max_HG_value Mean
0 A B 0 39 9.25
1 A B 18 39 9.25
2 A B 38 39 38.50
3 A C 0 39 9.25
4 A C 19 39 9.25
5 A C 39 39 38.50
6 B D 0 50 7.75
7 B D 17 50 7.75
8 B D 34 50 28.00
9 B D 55 50 52.50
10 B E 0 50 7.75
11 B E 14 50 7.75
12 B E 22 50 28.00
13 B E 50 50 52.50
14 C F 0 69 4.75
15 C F 10 69 4.75
16 C F 25 69 27.50
17 C F 50 69 49.00
18 C F 65 69 67.00
19 C G 0 69 4.75
20 C G 9 69 4.75
21 C G 30 69 27.50
22 C G 48 69 49.00
23 C G 69 69 67.00
似乎我们需要为 hgroup 中的每个低组应用 np.arange 和 pd.cut。我尝试了多种方法,但我似乎做对了。有人可以帮帮我吗
你不需要
pd.cut
因为你的间隔是均匀分布的:
df2['mean'] = df2.groupby(df2['value'] // 20)['value'].transform('mean')
print(df2)
# Output
hgroup lowgroup value max_hg_value mean
0 A B 0 39 9.25
1 A B 18 39 9.25
2 A B 38 39 38.50
3 A C 0 39 9.25
4 A C 19 39 9.25
5 A C 39 39 38.50
对于你的第二个例子,你似乎也需要按
Hgroup
分组:
df3['mean'] = df3.groupby(['Hgroup', df['Value'] // 20])['Value'].transform('mean')
print(df3)
# Output
Hgroup LowGoup Value Max_HG_value mean
0 A B 0 39 9.25
1 A B 18 39 9.25
2 A B 38 39 38.50
3 A C 0 39 9.25
4 A C 19 39 9.25
5 A C 39 39 38.50
6 B D 0 50 7.75
7 B D 17 50 7.75
8 B D 34 50 28.00
9 B D 55 50 52.50
10 B E 0 50 7.75
11 B E 14 50 7.75
12 B E 22 50 28.00
13 B E 50 50 52.50
14 C F 0 69 4.75
15 C F 10 69 4.75
16 C F 25 69 27.50
17 C F 50 69 49.00
18 C F 65 69 67.00
19 C G 0 69 4.75
20 C G 9 69 4.75
21 C G 30 69 27.50
22 C G 48 69 49.00
23 C G 69 69 67.00
谢谢,您的回答是正确的,但我刚刚意识到我在示例中遗漏了一个字段。间隔间隔不均匀,这就是我使用 pd.cut 的原因。在这里,我有一个真实例子的片段。
我想计算距离值在 0-20、20-40、40-60、60-80、∞-∞+20 之间时的平均高度(这就是我在前面的示例中使用 STEP=20 的原因)由Hgroup分组。我有数以千计的数据,所以我希望以编程方式计算所有这些值并将 STEP 作为唯一变量
Hgroup LowGoup Distance Altitude
0 A B 0 56
1 A B 18 50
2 A B 38 20
3 A C 0 60
4 A C 19 32
5 A C 39 12
6 B D 0 20
7 B D 17 50
8 B D 34 21
9 B D 55 23
10 B E 0 50
11 B E 14 60
12 B E 22 21
13 B E 50 20
14 C F 0 60
15 C F 10 63
16 C F 25 23
17 C F 50 21
18 C F 65 45
19 C G 0 40
20 C G 9 24
21 C G 30 23
22 C G 48 56
23 C G 69 60
我想得到这个答案
Hgroup LowGoup Distance Altitude Mean_altitude
0 A B 0 56 49.50
1 A B 18 50 49.50
2 A B 38 20 16.00
3 A C 0 60 49.50
4 A C 19 32 49.50
5 A C 39 12 16.00
6 B D 0 20 45.00
7 B D 17 50 45.00
8 B D 34 21 21.00
9 B D 55 23 21.50
10 B E 0 50 45.00
11 B E 14 60 45.00
12 B E 22 21 21.00
13 B E 50 20 21.50
14 C F 0 60 46.75
15 C F 10 63 46.75
16 C F 25 23 23.00
17 C F 50 21 38.50
18 C F 65 45 52.50
19 C G 0 40 46.75
20 C G 9 24 46.75
21 C G 30 23 23.00
22 C G 48 56 38.50
23 C G 69 60 52.50
如果你能多看看这个数据集并帮助我,那就太好了。 @Corralien