python - Pandas 中的代码标准化和应用功能花费了太多时间

标签 python python-3.x pandas

这只是我的代码的示例数据。我想标准化其他列中的总列。目前我有大约 2000 个组,标准化和 fgroup 需要 15 分钟。

有哪些方法可以减少时间。

import pandas as pd
import numpy as np

np.random.seed(1234)
n = 1500000

df = pd.DataFrame()
df['group'] = np.random.randint(1700, size=n)
df['ID'] = np.random.randint(5, size=n)
df['Total'] = np.random.randint(400, size=n)
df['Normalized_total'] = df.groupby('group')['Total'].apply(lambda x: (x-x.min())/(x.max()- x.min()))

def norm_group(df):
    if df['Normalized_total'] > 0.70 and df['group'] > 100 and df['ID'] > 3:
        return 3
    elif df['Normalized_total'] > 0.5 and df['group'] < 100 and df['ID'] < 3:
        return 2
    else:
        return 1

df['fgroup'] = df.apply(norm_group, axis=1)

谢谢

最佳答案

您可以使用transform并定义自己的函数

%timeit df['Normalized_total'] = df.groupby('group')['Total'].apply(lambda x: (x-x.min())/(x.max()- x.min()))
1 loop, best of 3: 508 ms per loop

# below is my solution
def myfunc():
    g=df.groupby('group')['Total']
    return df['Total']-g.transform('min')/g.transform(np.ptp)
%timeit myfunc()
1 loop, best of 3: 398 ms per loop

关于python - Pandas 中的代码标准化和应用功能花费了太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52503921/

相关文章:

python - Elasticsearch 中的关键字搜索和过滤

python - 如果列位于列表的任何部分,则过滤数据框

python - 将列表转换为嵌套字典

excel - 根据文件中的工作表名称从 pandas 数据框创建 csv 文件

python - 计算 Pandas 多级指数特定级别的增长率

python - 查找所有日期的通用ID python

python - 我可以在 Matplotlib 的每个循环中生成并显示不同的图像吗?

python - 通过表单发送表格数据到 Flask 方法

python - Fork 和 exec 未产生正确的结果

python - 为什么带有 numexpr 的 Pandas.eval() 这么慢?