如何计算熊猫数据框中行之间的变化

时间:2020-02-14 10:10:48

标签: python pandas

假设我有一个每日销售记录列。然后从中创建两个新列。每月跟踪一次更改。对于记录的每一天。我将如何在Pandas Data框架中执行此操作。是熊猫的新手,被困在这里。 这是一个示例数据集

sample dataset

我正在寻找的是创建一个新列“从一个月前更改”, 它将跟踪今天和30天之前的每日销售额之间的差异。

3 个答案:

答案 0 :(得分:0)

您可以使用pandas.DataFrame.diff

df['new_col'] = df.sales.diff(periods=30)

这将找到当前行和上方30行(这可能是30天前,也可能不是30天前)之间的差异

答案 1 :(得分:0)

您可能想发明一个月前 的约定,但是如果pd.DateOffset(),则已经实施了常见约定。

如果使用它,则可以通过以下方式构建增量列:

df['delta'] = df['Daily Sales'] - df.merge(df[['Date', 'Daily Sales']]
                                           .assign(M1 = df['Date']
                                             + pd.DateOffset(months=1))
             .drop_duplicates('M1').drop(columns='Date')
             .rename({'Daily Sales': 'prev'}, axis=1),
         left_on='Date', right_on='M1', how='left')['prev']

以上(魔术)配方的分解为:

  • 仅提取DateDayly Sailes列以进行进一步处理
  • Date列中添加一个月,并将其命名为M1
  • 在该日期删除由于使用DateOffset而造成的重复
  • Daily Sales命令重命名为prev
  • 按常见日期(使用M1列)将其与原始数据框合并
  • 一个月的差额是原始数据帧的Daily Sailes列与合并的数据框中的prev列之间的差。

答案 2 :(得分:-1)

了解正在使用的数据肯定会使回答这个问题变得容易得多。但是,一种常见的方法是通过Series.shift操作以下列方式在熊猫中创建新列:

import pandas as pd
df = pd.DataFrame({'Col1': [10, 20, 15, 30, 45],
                   'Col2': [13, 23, 18, 33, 48],
                   'Col3': [17, 27, 22, 37, 52]})

df['Col4'] = df.Col1.shift(periods=-3) # reference df.Col1 value from 3 rows back

您可以使用此新列在此处进行任何算术/算法计算。