假设我有一个每日销售记录列。然后从中创建两个新列。每月跟踪一次更改。对于记录的每一天。我将如何在Pandas Data框架中执行此操作。是熊猫的新手,被困在这里。 这是一个示例数据集
我正在寻找的是创建一个新列“从一个月前更改”, 它将跟踪今天和30天之前的每日销售额之间的差异。
答案 0 :(得分:0)
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']
以上(魔术)配方的分解为:
Date
和Dayly 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
您可以使用此新列在此处进行任何算术/算法计算。