如何解决Pandas:如何使用大于和小于分位数分配新的 DF 值?
我是编程新手,我的英语不是很好,所以请耐心等待=D
这是主 DF (df_mcred_pf
)。我在下面完整发布了所有数据和代码。
从主 DF,我创建了一个 DF,其中包含来自第一个分位数的所有值,并且它起作用了:
df_mcred_pf_Q1 = df_mcred_pf[df_mcred_pf['vr_tx_jrs']<=np.quantile(df_mcred_pf['vr_tx_jrs'],vQ1_mcred_pf/100)]
df_mcred_pf_Q1.head(30)
现在我需要用第二个分位数的值创建一个新的 DF:所有大于 1sq 分位数 (vQ1_mcred_pf
) 和小于第二个分位数 ({{1}) 的值的值})。我试过了,但没有用:
vQ2_mcred_pf
我收到此错误:df_mcred_pf_Q2 = df_mcred_pf[df_mcred_pf['vr_tx_jrs']>np.quantile(df_mcred_pf['vr_tx_jrs'],vQ1_mcred_pf/100) & df_mcred_pf['vr_tx_jrs']<=np.quantile(df_mcred_pf['vr_tx_jrs'],vQ2_mcred_pf/100)]
我被困在这里了。请帮帮我好吗?
完整代码在这里:
TypeError: Cannot perform 'rand_' with a dtyped [float64] array and scalar of type [bool]
解决方法
我会以不同的方式解决这个问题,并创建一个带有分位数描述符的列:
import pandas as pd
import numpy as np
#your dataframe here
quant = [0,.25,.5,.75,1]
s = df_mcred_pf["vr_tx_jrs"].quantile(quant)
df_mcred_pf["Quartil"] = pd.cut(df_mcred_pf["vr_tx_jrs"],s,include_lowest=True,labels=["Q1","Q2","Q3","Q4"])
这将返回以下输出:
cd_mod_pri cd_mod_sec id_tp_pes ... vr_tx_jrs quantidade Quartil
0 2 12 F ... 12.55 437 Q1
1 2 12 F ... 17.81 437 Q1
2 2 12 F ... 18.14 437 Q1
3 2 12 F ... 20.43 437 Q1
4 2 12 F ... 21.19 437 Q1
5 2 12 F ... 22.73 437 Q1
6 2 12 F ... 23.73 437 Q1
7 2 12 F ... 25.26 437 Q1
8 2 12 F ... 25.34 437 Q2
9 2 12 F ... 26.02 437 Q2
10 2 12 F ... 26.78 437 Q2
...
28 2 12 F ... 31.89 437 Q4
29 2 12 F ... 32.92 437 Q4
[30 rows x 8 columns]
现在,您可以按四分位数过滤数据框:
print(df_mcred_pf[df_mcred_pf["Quartil"]=="Q2"])
您也可以选择将四分位数编码为数字,例如
labels=range(len(quant)-1)
然后,你可以得到高达 0.75 的四分位数
print(df_mcred_pf[df_mcred_pf["Quartil"]<3])
也许有更简单的方法来实现这一点,让我们看看其他人会想出什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。