gpt4 book ai didi

python - 根据条件更改 pandas 中的列值

转载 作者:行者123 更新时间:2023-12-01 01:27:11 25 4
gpt4 key购买 nike

df:

      A
0 219
1 590
2 272
3 945
4 175
5 930
6 662
7 472
8 251
9 130

我正在尝试根据值所在的分位数创建一个新的列分位数,例如:

if value > 1st quantile : value = 1
if value > 2nd quantile : value = 2
if value > 3rd quantile : value = 3
if value > 4th quantile : value = 4

代码:

f_q = df['A'] .quantile (0.25)
s_q = df['A'] .quantile (0.5)
t_q = df['A'] .quantile (0.75)
fo_q = df['A'] .quantile (1)


index = 0
for i in range(len(test_df)):

value = df.at[index,"A"]
if value > 0 and value <= f_q:
df.at[index,"A"] = 1

elif value > f_q and value <= s_q:
df.at[index,"A"] = 2

elif value > s_q and value <= t_q:
df.at[index,"A"] = 3

elif value > t_q and value <= fo_q:
df.at[index,"A"] = 4


index += 1

代码运行良好。但我想知道是否有更有效的 pandas 方法来做到这一点。任何建议都会有帮助。

最佳答案

是的,使用 pd.qcut :

>>> pd.qcut(df.A, 4).cat.codes + 1
0 1
1 3
2 2
3 4
4 1
5 4
6 4
7 3
8 2
9 1
dtype: int8

(给我的结果与您的代码完全相同。)

您也可以调用np.unique qcut 结果:

>>> np.unique(pd.qcut(df.A, 4), return_inverse=True)[1] + 1
array([1, 3, 2, 4, 1, 4, 4, 3, 2, 1])

或者,使用 pd.factorize (注意输出中的细微差别):

>>> pd.factorize(pd.qcut(df.A, 4))[0] + 1
array([1, 2, 3, 4, 1, 4, 4, 2, 3, 1])

关于python - 根据条件更改 pandas 中的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53235718/

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