迭代熊猫数据框并应用条件函数的更快方法

贝扎德

概括

我正在尝试遍历一个大型数据帧。根据几列确定唯一的组,根据组中有多少将平均值应用于另一列。在迭代大型数据集并在许多列上应用平均函数时,我当前的方法非常慢。有没有办法可以更有效地做到这一点?

例子

这是问题的一个例子。我想找到 ['A', 'B', 'C'] 的独特组合。对于每个独特的组合,我想要列 ['D'] 的值/组中的行数。

编辑:生成的数据框应保留重复的组。但是编辑列“D”

import pandas as pd
import numpy as np
import datetime

def time_mean_rows():
    # Generate some random data
    A = np.random.randint(0, 5, 1000)
    B = np.random.randint(0, 5, 1000)
    C = np.random.randint(0, 5, 1000)
    D = np.random.randint(0, 10, 1000)

    # init dataframe
    df = pd.DataFrame(data=[A, B, C, D]).T
    df.columns = ['A', 'B', 'C', 'D']


    tstart = datetime.datetime.now()

    # Get unique combinations of A, B, C
    unique_groups = df[['A', 'B', 'C']].drop_duplicates().reset_index()

    # Iterate unique groups
    normalised_solutions = []
    for idx, row in unique_groups.iterrows():
        # Subset dataframe to the unique group
        sub_df = df[
            (df['A'] == row['A']) &
            (df['B'] == row['B']) & 
            (df['C'] == row['C'])
            ]

        # If more than one solution, get mean of column D
        num_solutions = len(sub_df)        
        if num_solutions > 1:
            sub_df.loc[:, 'D'] = sub_df.loc[:,'D'].values.sum(axis=0) / num_solutions
            normalised_solutions.append(sub_df)

    # Concatenate results
    res = pd.concat(normalised_solutions)

    tend = datetime.datetime.now()
    time_elapsed = (tstart - tend).seconds
    print(time_elapsed)

我知道导致速度变慢的部分是当 num_solutions > 1 时。我怎样才能更有效地做到这一点

塞尔吉·巴列斯塔

这是对 AT_asks 答案的补充,该答案仅给出了解决方案的第一部分。

一旦我们有了df.groupby(['A', 'B', 'C'])['D'].mean()它,我们就可以使用它来更改'D'原始数据帧副本中列的值,前提是我们使用共享相同索引的数据帧。那么全局解决方案是:

res = df.set_index(['A', 'B', 'C']).assign(
    D=df.groupby(['A', 'B', 'C'])['D'].mean()).reset_index()

这将包含相同的行(即使res来自 OP 问题数据帧的顺序不同

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

遍历熊猫数据框并应用条件的正确方法是什么?

来自分类Dev

遍历熊猫数据框并应用条件

来自分类Dev

跨列迭代条件以切片熊猫数据框

来自分类Dev

如何编写一个遍历大熊猫数据框组并应用分层条件的函数?

来自分类Dev

迭代槽熊猫数据框

来自分类Dev

迭代时更新熊猫数据框的更好方法

来自分类Dev

在NaN中将条件COUNTIF应用于熊猫数据框

来自分类Dev

熊猫:遍历数据框并根据条件应用更改

来自分类Dev

如何在熊猫数据框列上应用条件?

来自分类Dev

通过对熊猫的不同列应用条件来过滤数据框

来自分类Dev

熊猫和Python数据框和条件移位函数

来自分类Dev

熊猫数据框中的lambda函数中的多个条件

来自分类Dev

熊猫和Python数据框和条件移位函数

来自分类Dev

将函数应用于熊猫数据框

来自分类Dev

将re函数应用于混合的熊猫数据框

来自分类Dev

使用多个条件迭代数据框的正确方法

来自分类Dev

熊猫数据框中的条件

来自分类Dev

熊猫数据框条件计数

来自分类Dev

条件求和熊猫数据框

来自分类Dev

有没有更快的方法来生成此熊猫数据框?

来自分类Dev

使用键在熊猫中重新组合数据框。比遍历行更快的方法吗?

来自分类Dev

在嵌套数据框中应用条件函数

来自分类Dev

如何基于数据框中的列条件应用函数

来自分类Dev

如何基于数据框中的列条件应用函数

来自分类Dev

在嵌套数据框中应用条件函数

来自分类Dev

将函数应用于熊猫数据框以创建更大的数据框

来自分类Dev

熊猫数据框项上的迭代

来自分类Dev

我想迭代更新熊猫数据框

来自分类Dev

使用无需迭代的应用将代码分配给熊猫数据框

Related 相关文章

热门标签

归档