数据帧放入箱子

2024-04-24 20:22:55 发布

您现在位置:Python中文网/ 问答频道 /正文

在数据帧中,我尝试使用“平均值”列将值分为3个存储单元。在

                     num_countries         mean
0         'Europe',             25   161.572326
1           'Asia',              7   607.983830
2  'North America',              3  1560.438095
3  'South America',              2   199.148901
4      'Australia',              1   218.021429
5          'Africa'              1   213.846154
6        'Oceania',              1    39.378571

我的箱子是

^{pr2}$

结果是[-inf,-100.388312373895811957.6423998696303,inf]

当我试着把它们放进垃圾箱时,就会发生这种情况。在

^{3}$

Tags: 数据meancountriesnuminf平均值southeurope
2条回答

我会用np.searchsorted

x = in_order['mean'].values
sig = x.std()
mu = x.mean()

in_order.assign(bins=np.searchsorted([mu - sig, mu + sig], x))

       continent  num_countries         mean  bins
0         Europe             25   161.572326     1
1           Asia              7   607.983830     1
2  North America              3  1560.438095     2
3  South America              2   199.148901     1
4      Australia              1   218.021429     1
5         Africa              1   213.846154     1
6        Oceania              1    39.378571     1

如果你愿意,我们可以用标签

^{pr2}$

从您的数据开始:

print(df)
       continent  num_countries         mean
0         Europe             25   161.572326
1           Asia              7   607.983830
2  North America              3  1560.438095
3  South America              2   199.148901
4      Australia              1   218.021429
5         Africa              1   213.846154
6        Oceania              1    39.378571

我认为主要的问题是引用mean列的方式。请注意,mean也是pd.DataFrame对象上的一阶函数。注意:

^{pr2}$

如果要访问mean列(而不是mean函数),则需要使用df['mean']进行访问。在

^{3}$

或者,您是否考虑过pd.qcut?你可以很简单地传递箱子的数量,你的数据就会被分为那么多分位数。在

s = pd.qcut(df['mean'], 4)
print(s)
0      (39.378, 180.361]
1    (413.003, 1560.438]
2    (413.003, 1560.438]
3     (180.361, 213.846]
4     (213.846, 413.003]
5     (180.361, 213.846]
6      (39.378, 180.361]
Name: mean, dtype: category
Categories (4, interval[float64]): [(39.378, 180.361] < (180.361, 213.846] < (213.846, 413.003] <
                                    (413.003, 1560.438]]

print(s.cat.codes)
0    0
1    3
2    3
3    1
4    2
5    1
6    0
dtype: int8

你上面的方法将你的大部分数据存储到一个类别中,所以我相信这对你来说会更好。在

相关问题 更多 >