使用 np.arange 和 pd.cut 使用不同的停止值(和 bin)或任何其他方式计算分组值的平均值/平均值

问题描述 投票:0回答:2

我有以下数据框

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。我尝试了多种方法,但我似乎做对了。有人可以帮帮我吗

python pandas numpy average bins
2个回答
2
投票

你不需要

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

0
投票

谢谢,您的回答是正确的,但我刚刚意识到我在示例中遗漏了一个字段。间隔间隔不均匀,这就是我使用 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

© www.soinside.com 2019 - 2024. All rights reserved.