当前位置: 首页 > 知识库问答 >
问题:

代码需要太多时间进行规范化和在熊猫中应用函数

邵宜年
2023-03-14

这只是我的代码中的示例数据。我想规范化其他列中的合计列。目前我有大约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)

谢谢

共有1个答案

宣弘新
2023-03-14

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

%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

 类似资料:
  • 我有一个熊猫数据框,它有语料库的术语频率,术语为行,年份为列,就像这样: 我希望能够通过将每个单词的值除以给定年份的总单词数来标准化它们——有些年份包含两倍多的文本,所以我试图按年缩放(像谷歌图书一样)。我已经看了如何缩放单个列的例子,克里斯·阿尔邦和我在SO上看到了缩放所有列的例子,但是每次我试图将这个数据框转换为一个数组来缩放时,事情都会窒息列这个词不是数字。(我尝试将术语列设置为索引,但不太

  • 如果可能的话,我如何用更少的代码将下面所示代码的结尾部分移到另一行或修改文本,以实现所需的结果。我键入了以下代码: 我试图实现的是显示以下数据:-仅显示,仅显示Dakota Spitfire和Hurricane或Dakota和Spitfire或Dakota和两个Spitfire,如果它们显示在数据表明细表中,则完整代码如下。需要编辑的是从Southport=开始的行: 当我运行代码时,我得到以下回

  • 我们正在将ESAPI2.x(owasp java安全库)添加到一个应用程序中。 有人能展示一个通过使用规范化来防止的攻击样本吗??(爪哇语) 谢谢!

  • 我希望能够添加一个列,根据值按顺序计算行数。例如,下面是三个不同的人,他们的记录有时间戳。我想根据PersonID计算记录的顺序。这应该为每个PersonID重新启动。(我可以用Index()在Tableau中执行此操作,但我希望它也是原始文件的一部分) 有没有办法减去日期时间呢?我的方法是只选择顺序1作为数据帧,然后只选择顺序2,然后合并,然后减去。有没有一种方法可以自动完成?

  • 任何解决这一问题的建议都将不胜感激。或者我们可以用另一种方式来计数?我想补充一些细节。滑动大小是一个事件和窗口大小超过10小时(每秒大约有300个事件),我们需要对每个事件做出反应。所以在这种情况下,我们没有使用Flink提供的窗口。我们使用来存储前面的信息。在中用于触发旧数据的清理作业。最后dinstinct键的数量非常多。