python - 代码在 Pandas 中花费太多时间进行规范化和应用函数
问题描述
这只是我的代码的示例数据。我想规范化其他列中的总列。目前我有大约 2000 个组,它需要 15 分钟进行标准化和 fgroup。
有什么方法可以减少时间。
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
推荐阅读
- c# - 通过 RedirectToAction() 从同一控制器和其他控制器调用的操作
- excel - 将变量分配给具有 20 行的列并在 Excel VBA 中减去它们
- c# - 将 Html 字符串转换为 pdf itextSharp 时不应用样式
- python - 如何匹配和合并两个具有完全不同值的数据框,但数据框列中的数字除外?
- java - SpringBoot MongoDB插入测试数据库
- reactjs - ReactJS Redux 从变量动态加载图像
- c++ - 当 uint32_t > 45 时,Arduino 似乎崩溃了
- html - 更改行之间的 CSS Grid 垂直间距
- maven - Versions Maven Plugin update-parent 检查在线 maven
- c# - 在 C# 8.0 中反序列化对象时处理临时空引用类型?