gpt4 book ai didi

python-3.x - 检查数字范围并在 pandas 数据框中的新列中写入值

转载 作者:行者123 更新时间:2023-12-02 03:32:42 24 4
gpt4 key购买 nike

我需要迭代“movies_lated”列,根据条件检查该值,然后在新创建的“expert_level”列中写入一个值。当我对数据子集进行测试时,它有效。但是当我针对整个日期集运行它时,它只填充值 1。

for num in df_merge['movies_rated']:
if num in range(20,31):
df_merge['expert_level'] = 1
elif num in range(31,53):
df_merge['expert_level'] = 2
elif num in range(53,99):
df_merge['expert_level'] = 3
elif num in range(99,202):
df_merge['expert_level'] = 4
else:
df_merge['expert_level'] = 5

这是一个示例数据框。

movies = [88,20,35,55,1203,99,2222,847]
name = ['angie','chris','pine','benedict','alice','spock','tony','xena']
df = pd.DataFrame(movies,name,columns=['movies_rated'])

当然有更简洁的方法吗?

最佳答案

您可以构建一个 IntervalIndex,然后应用 pd.cut。我确信这是重复的,但我现在找不到同时使用 close='left'.codes 的,尽管我确信它存在。

bins = pd.IntervalIndex.from_breaks([0, 20, 31, 53, 99, 202, np.inf], closed='left')
df["expert_level"] = pd.cut(movies, bins).codes

这给了我

In [242]: bins
Out[242]:
IntervalIndex([[0.0, 20.0), [20.0, 31.0), [31.0, 53.0), [53.0, 99.0), [99.0, 202.0), [202.0, inf)]
closed='left',
dtype='interval[float64]')

In [243]: df
Out[243]:
movies_rated expert_level
angie 88 3
chris 20 1
pine 35 2
benedict 55 3
alice 1203 5
spock 99 4
tony 2222 5
xena 847 5

请注意,我已将其设置为低于 20 分的得分为 0,这样就可以将它们与非常高的排名区分开来。如果您确实希望 bin 之外的所有内容都变为 5,则可以直接将 0 重新映射到 5,或者仅传递 [20, 31, 53, 99, 202] 的中断,然后使用代码 -1 映射任何内容(这意味着“未分箱”)到 5。

关于python-3.x - 检查数字范围并在 pandas 数据框中的新列中写入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51349581/

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