gpt4 book ai didi

python - 是否有一种有效/最佳的方法来为 Pandas 数据框列中的值分配分数?

转载 作者:行者123 更新时间:2023-12-04 03:25:45 26 4
gpt4 key购买 nike

我有一列数据框,其中包含客户“关系长度”的值。我想根据它们是否低于终止关系长度的平均值、高于平均值、高于 1 个标准差和高于 2 个标准差,将这些值转换为 1-4 的数字。在不使用 for 循环的情况下,是否有更简单/更快的方法来执行此操作?

到目前为止,这是我的代码:

average = terminatedDf['Relationship Length'].mean()

standardDeviation = terminatedDf['Relationship Length'].std()

lorScores = {np.arange(0, average): 1, np.arange(average, standardDeviation): 2, np.arange(standardDeviation, standardDeviation*2): 3, np.arange(standardDeviation*2, 150): 4}

reportDf['Length of Relationship Score'] = reportDf['Relationship Length'].map(lorScores)

我的问题是 numpy 数组不可散列,但使用常规范围函数只允许整数。

我想我可以遍历数据框,因为它只有大约 1500 行,如下所示:

for row in reportDf:
if row[5] < average:
row[15] = 1
else:
....

我不确定即使我让字典工作,.map 是否比 for 循环更有效。有一个更好的方法吗?我的直觉告诉我,这可能只是一项低效的任务。这是 Dataframe 的示例,但它实际上是从 salesforce API 下载的。

reportDf = ({'Owner': ['Bob', 'Jane', 'Alice', 'Fred'], 
'Name': ['John', 'Johnny', 'Suzie', 'Larry']
'Relationship Length': [0.78, 0.73, 19.36, 7.36]
})

平均长度约为6.3,标准差约为3.4

最佳答案

我会为此创建函数并使用 pandas.Series.apply以下方式

def get_score(x):
if x <= average:
return 1
if average < x <= standardDeviation:
return 2
if standardDeviation < x <= standardDeviation*2:
return 3
if standardDeviation*2 < x <= 150:
return 4

reportDf['Length of Relationship Score'] = reportDf['Relationship Length'].apply(get_score)

我不知道它是否会更快,但如果您有 1500 行左右,最终的优化可能不值得为实现它而付出努力。

编辑:我发现有 pandas.cut专门为这个任务制作的函数,假设我想划分数字,所以 0...9 是“少数”,10...99 是“十”,其余未定义:

import pandas as pd
df = pd.DataFrame({'x':[1,9,10,17,45,99,100,121]})
df['category'] = pd.cut(df['x'], bins=[0,9,99], labels=['few','tens'])
print(df)

输出

     x category
0 1 few
1 9 few
2 10 tens
3 17 tens
4 45 tens
5 99 tens
6 100 NaN
7 121 NaN

关于python - 是否有一种有效/最佳的方法来为 Pandas 数据框列中的值分配分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67622349/

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