Python 根据条件更改熊猫中的列值

Python 根据条件更改熊猫中的列值,python,pandas,Python,Pandas,df: 我正在尝试创建一个新的分位数列,该分位数值基于该分位数,例如: A 0 219 1 590 2 272 3 945 4 175 5 930 6 662 7 472 8 251 9 130 代码: f_q=df['A'].分位数(0.25) s_q=df['A']。分位数(0.5) t_q=df['A']。分位数(0.75) fo_q=df['A']。分位数(1) 索引=0 对于范围内的i(len(测试_df)):

df:

我正在尝试创建一个新的分位数列,该分位数值基于该分位数,例如:

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

f_q=df['A'].分位数(0.25)
s_q=df['A']。分位数(0.5)
t_q=df['A']。分位数(0.75)
fo_q=df['A']。分位数(1)
索引=0
对于范围内的i(len(测试_df)):
值=在[索引,“A”]
如果值>0且值f_q和值s_q和值t_q和值是,则使用:

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

您还可以调用
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
或者,使用(注意输出中的细微差异):


@如果需要,vikky添加了更多选项。非常感谢。我将比较这些选项的性能,并将其发布给未来的读者。
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
>>> 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(pd.qcut(df.A, 4), return_inverse=True)[1] + 1
array([1, 3, 2, 4, 1, 4, 4, 3, 2, 1])
>>> pd.factorize(pd.qcut(df.A, 4))[0] + 1
array([1, 2, 3, 4, 1, 4, 4, 2, 3, 1])