【问题标题】:How to replace slow 'apply' method in pandas DataFrame如何在 pandas DataFrame 中替换慢速“应用”方法
【发布时间】:2022-07-15 22:14:55
【问题描述】:

我有一个包含货币交易的 DataFrame:

import pandas as pd

data = [[1653663281618, -583.8686, 'USD'],
       [1653741652125, -84.0381, 'USD'],
       [1653776860252, -33.8723, 'USD'],
       [1653845294504, -465.4614, 'USD'],
       [1653847155140, 22.285, 'USD'],
       [1653993629537, -358.04640000000006, 'USD']]

df = pd.DataFrame(data = data, columns = ['time', 'qty', 'currency_1'])

我需要添加新列“余额”,它将计算所有先前交易的“数量”列的总和。我有一个简单的功能:

def balance(row):
    table = df[df['time'] < row['time']]
    return table['qty'].sum()

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

但我真正的 DataFrame 非常大,并且 .apply 方法的运行速度非常慢。 在这种情况下是否可以避免使用 apply 函数? 像 np.where 之类的东西?

【问题讨论】:

    标签: python pandas apply


    【解决方案1】:

    试试累加法cumsum

    df['balance'] = df['qty'].cumsum()
    

    输出:

                time       qty currency_1    balance
    0  1653663281618 -583.8686        USD  -583.8686
    1  1653741652125  -84.0381        USD  -667.9067
    2  1653776860252  -33.8723        USD  -701.7790
    3  1653845294504 -465.4614        USD -1167.2404
    4  1653847155140   22.2850        USD -1144.9554
    5  1653993629537 -358.0464        USD -1503.0018
    

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 2017-02-12
      • 2023-01-24
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      相关资源
      最近更新 更多