gpt4 book ai didi

python - 带数据框的条件语句/If 语句

转载 作者:行者123 更新时间:2023-12-04 01:05:02 28 4
gpt4 key购买 nike

我正在尝试根据多个列“Class”和“Value”为“Percentage”列分配一个值

下面是一个包含我的数据框的链接: https://filebin.net/fo2wk7crmwf0fycc

这是我想要应用的逻辑:

If df['Class'] equals 2 or 3, and if df['Value'] is less than 0.5, set df['Percentage'] to 0
If df['Class'] equals 2 or 3, and if df['Value'] is > 0.5 and <= 0.7, set df['Percentage'] to 0.25
If df['Class'] equals 2 or 3, and if df['Value'] is > 0.7 and <= 0.9, set df['Percentage'] to 0.5
Else set df['Percentage'] to 1

下面是我正在寻找的输出示例:

<表类="s-表"><头>类值(value)百分比<正文>20.01020.60.2530.90.5331

谢谢

最佳答案

Numpy 和 searchsorted

在这种情况下,当使用 searchsorted 时,您不需要包括 01 这样的边界。

bins =  np.array([.5, .7, .9])
labels = np.array([0, .25, .5, 1])
cut = bins.searchsorted(df.Value)
results = labels[cut]

df.assign(Percentage=np.where(df['Class'].isin([2, 3]), results, 1))

Class Value Percentage
0 2 0.000620 0.0
1 2 0.000620 0.0
2 3 0.001240 0.0
3 4 0.000620 1.0
4 5 0.000620 1.0
... ... ... ...
14782 5 0.001178 1.0
14783 2 0.001116 0.0
14784 3 0.001178 0.0
14785 5 0.000310 1.0
14786 5 0.001116 1.0

[14787 rows x 3 columns]

Pandas

使用 pd.cut 时,您确实需要边界,因为 Pandas 会创建间隔。

#                        / boundaries \
# ↓ ↓
cut = pd.cut(df.Value, [0, .5, .7, .9, 1], labels=[0, .25, .5, 1])

df.assign(Percentage=np.where(df['Class'].isin([2, 3]), cut, 1))

Class Value Percentage
0 2 0.000620 0.0
1 2 0.000620 0.0
2 3 0.001240 0.0
3 4 0.000620 1.0
4 5 0.000620 1.0
... ... ... ...
14782 5 0.001178 1.0
14783 2 0.001116 0.0
14784 3 0.001178 0.0
14785 5 0.000310 1.0
14786 5 0.001116 1.0

[14787 rows x 3 columns]

关于python - 带数据框的条件语句/If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66750326/

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