• 常用
  • 百度
  • google
  • 站内搜索

数码

Pandas教程,基于相邻列条件进行累计求和的方法详解

  • 更新日期:2025-11-26
  • 查看次数:2812
本文是一篇关于 Pandas 中基于相邻列条件进行累计求和的教程。教程中详细介绍了如何使用 Pandas 库中的函数和方法,通过设置相邻列的条件,对数据进行累计求和操作。教程内容简洁明了,步骤清晰,适合初学者和有一定 Pandas 使用经验的用户学习。通过该教程,读者可以快速掌握如何利用 Pandas 进行数据分析和处理。

基于相邻列条件进行累计求和的 Pandas 教程

本文旨在介绍如何使用 Pandas 在满足特定条件下对数据进行累计求和。我们将演示如何基于相邻列(例如,“Buy”和“Sell”)的值来选择性地累加“Value”列,并提供详细的代码示例和解释,帮助读者理解和应用这种数据处理技巧。

在数据分析中,经常需要根据特定条件对数据进行累计求和。Pandas 提供了强大的工具来实现这一目标,而无需编写显式的循环。下面,我们将详细介绍如何利用 Pandas 的 combine_first(), ffill(), 和 cumsum() 函数,基于相邻列的条件来实现累计求和。

数据准备

首先,我们创建一个 Pandas DataFrame 来模拟实际数据:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({
    'date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06', '2023-01-07', '2023-01-08', '2023-01-09', '2023-01-10', '2023-01-11', '2023-01-12'],
    'buy': [None, 1, None, None, None, None, None, 1, None, None, None, None],
    'sell': [None, None, None, None, 1, None, None, None, None, None, 1, None],
    'value': [1, 5, 1, 1, 1, 5, 1, 5, 1, 1, 1, 5]
})

在这个 DataFrame 中,buy 和 sell 列表示买入和卖出信号,value 列表示需要累计求和的值。我们的目标是仅在 buy 或 sell 列有值时才累加 value。

数据处理步骤

  1. 处理 sell 列: 为了区分 buy 和 sell 信号,我们将 sell 列的值乘以 -1。这有助于后续的条件判断。

    df1['sell'] = df1['sell'] * -1
  2. 合并 buy 和 sell 列: 使用 combine_first() 函数将 buy 和 sell 列合并成一个新的 buysell 列。如果 buy 列有值,则使用 buy 的值;否则,使用 sell 的值。

    df1['buysell'] = df1['buy'].combine_first(df1['sell'])
  3. 填充 buysell 列: 使用 ffill() 函数向前填充 buysell 列中的 NaN 值。这会将买入信号延续到下一个非 NaN 值之前。

    df1.loc[df1['buysell'].ffill() == 1, 'buysell'] = 1
  4. 创建掩码: 创建一个布尔掩码,用于标记 buysell 列中非 NaN 值的行。

    mask = ~df1['buysell'].isna()
  5. 创建 buysellvalue 列: 使用掩码将 value 列的值复制到新的 buysellvalue 列中,仅针对 buysell 列中非 NaN 值的行。

    df1.loc[mask, 'buysellvalue'] = df1.loc[mask, 'value']
  6. 累计求和: 使用 cumsum() 函数对 buysellvalue 列进行累计求和,并将结果存储在 cumbuysellvalue 列中。

    df1['cumbuysellvalue'] = df1['buysellvalue'].cumsum()

完整代码示例

import pandas as pd
import numpy as np

df1 = pd.DataFrame({
    'date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06', '2023-01-07', '2023-01-08', '2023-01-09', '2023-01-10', '2023-01-11', '2023-01-12'],
    'buy': [None, 1, None, None, None, None, None, 1, None, None, None, None],
    'sell': [None, None, None, None, 1, None, None, None, None, None, 1, None],
    'value': [1, 5, 1, 1, 1, 5, 1, 5, 1, 1, 1, 5]
})

# make sell negative so it can be discerned from buy
df1['sell'] = df1['sell'] * -1

# create 'buysell' column which is combination of 'buy' and 'sell' columns
df1['buysell'] = df1['buy'].combine_first(df1['sell'])

# use ffill() to fill buysell from 1 until it is not 1
df1.loc[df1['buysell'].ffill() == 1, 'buysell'] = 1

# create a mask for where 'buysell' is not NaN
mask = ~df1['buysell'].isna()

# use the mask to create a 'buysellvalue' column with the contents of 'value' column for rows where the mask is true
df1.loc[mask, 'buysellvalue'] = df1.loc[mask, 'value']

# use cumsum()
df1['cumbuysellvalue'] = df1['buysellvalue'].cumsum()

print(df1)

注意事项

  • 确保数据类型正确。例如,buy 和 sell 列应为数值类型,以便进行算术运算。
  • 理解 ffill() 函数的行为。它会用前一个非 NaN 值填充 NaN 值,直到遇到下一个非 NaN 值。
  • 掩码的使用是关键。它可以帮助我们选择性地对 DataFrame 的行进行操作。

总结

通过使用 Pandas 的 combine_first(), ffill(), 和 cumsum() 函数,我们可以高效地实现基于相邻列条件的累计求和,避免了使用循环,提高了代码的执行效率和可读性。这种方法在金融数据分析、时间序列分析等领域非常有用。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

imtoken下载 im钱包 imtoken imtoken 快连官网 imtoken imtoken imtoken imtoken imtoken wallet imtoken imtoken官网 imtoken钱包 imtoken下载 imtoken官网 imtoken钱包 imtoken安卓下载 imtoken下载 imtoken官方下载 imtoken官网 imtoken安卓下载 imtoken下载 imtoken下载 imtoken imtoken imtoken imtoken imtoken imtoken imtoken imtoken imtoken bitget wallet telegram下载 quickq VPN trust wallet v2rayn imtoken