gpt4 book ai didi

python - 如何一次对数据中的所有列进行分类? (使所有值变为高、中、低)

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:46 32 4
gpt4 key购买 nike

我正在尝试将我的数据集中的所有值转换为分类值,我希望根据它们的分位数值将所有数值分类为低、平均值或高。

所以如果这个值低于系列的25%,就会被转换为“Low”

我尝试使用 assign 然后应用我提供的函数:

def turn_into_categorical(row):
quantile_level = [.25, .5, .75]
for r in row:
cut = refugees_T_F_V_P_full_data.r.quantile(quantile_level)
if r >= cut[.75]:
return "High"
elif r >= cut[.25] and r < cut[0.75]:
return "Average"
else:
return "Low"

refugees_T_F_V_P_full_data.apply(turn_into_categorical, axis = 1)

但是,代码运行不正常。我也通过 iterrows 尝试过,但我想知道是否有更快的方法?

这是我要转换的数据,除年和月外的所有数字都应根据其分位数值分为低、中、高。

    Year  Month  Central Equatoria  Eastern Equatoria  Gogrial  Jonglei
0 2014 10 6.0 1.0 0.0 3.0
1 2014 11 4.0 3.0 0.0 12.0
2 2014 12 3.0 5.0 0.0 11.0
3 2015 1 7.0 2.0 0.0 4.0
4 2015 2 5.0 5.0 0.0 10.0
5 2015 3 7.0 5.0 0.0 8.0
6 2015 4 4.0 1.0 0.0 6.0
7 2015 5 5.0 0.0 0.0 7.0
8 2015 6 4.0 1.0 0.0 6.0
9 2015 7 15.0 2.0 0.0 9.0
10 2015 8 10.0 7.0 0.0 9.0
11 2015 9 12.0 0.0 0.0 8.0
12 2015 10 12.0 0.0 0.0 5.0
13 2015 11 8.0 5.0 0.0 10.0
14 2015 12 5.0 7.0 0.0 3.0

预期结果:(示例)

    Year  Month  Central Equatoria  Eastern Equatoria  Gogrial  Jonglei
0 2014 10 High Medium Low Medium
1 2014 11 Low Medium Low high

最佳答案

看起来你想要pd.qcut ,正是这样做的。来自文档:

Quantile-based discretization function

所以你可以 apply pd.qcut 沿着从 Central Equatoria 开始的数据帧的列,指定要用于对系列进行装箱的分位数 q = [0, 0.25 , 0.75, 1.0]

df.loc[:,'Central Equatoria':].apply(lambda x: pd.qcut(x, q=[0, 0.25, 0.75, 1.0], 
labels =['low','medium','high'])
if not x.nunique() == 1 else 'low'))

输出

       Central Equatoria Eastern Equatoria Gogrial Jonglei
0 medium low low low
1 low medium low high
2 low medium low high
3 medium medium low low
4 medium medium low high
5 medium medium low medium
6 low low low medium
7 medium low low medium
8 low low low medium
9 high medium low medium
10 high high low medium
11 high low low medium
12 high low low low
13 medium medium low high
14 medium high low low

关于python - 如何一次对数据中的所有列进行分类? (使所有值变为高、中、低),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54369807/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com