Python 根据条件更改熊猫中的列值
df: 我正在尝试创建一个新的分位数列,该分位数值基于该分位数,例如: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)):
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])