熊猫:添加列以显示前一天,周,月的值

时间:2019-06-27 19:30:43

标签: python pandas dataframe

我制作了一个数据框。请参见下图。

dataframe_sample_image

我想添加显示前一天,一周,一个月的值的列。 我的预期输出将是 P1_day,P1_yesterday,P1_week,P1_lastweek,P1_month,P1_lastmonth 等。 帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我不是100%肯定我了解您对使用shift的厌恶,但考虑到您有一个像这样的数据框:

import pandas as pd
import numpy as np

original = pd.DataFrame(np.random.randint(0,100,size=(10, 3)), columns=["P1_day", "P1_week", "P1_month"])

您始终可以按列移动,例如:

original["P1_yesterday"] = original["P1_day"].shift()

或子集化您要移动,移动和重命名的所有列,然后将它们连接到原始数据帧,例如:

subset_shifted = original[["P1_day", "P1_week", "P1_month"]].shift()
subset_shifted.columns = ["P1_yesterday", "P1_lastweek", "P1_lastmonth"]
original = pd.concat([original, subset_shifted], axis = 1)

答案 1 :(得分:0)

除了使用shift之外,您还可以使用dateutil库。

例如:

import pandas as pd
import dateutil.relativedelta as rd

df = pd.DataFrame({'Date':pd.datetime(2019,5,1),pd.datetime(2019,5,2),pd.datetime(2019,5,3)]})

df
        Date
0 2019-05-01
1 2019-05-02
2 2019-05-03

然后使用dateutil获取新日期

df['P1_yesterday'] = df['Date'].dt.date + rd.relativedelta(days=-1)
df['P1_lastweek'] = df['Date'].dt.date + rd.relativedelta(weeks=-1)
df['P1_lastmonth'] = df['Date'].dt.date + rd.relativedelta(months=-1)
df

        Date P1_yesterday P1_lastweek P1_lastmonth
0 2019-05-01   2019-04-30  2019-04-24   2019-04-01
1 2019-05-02   2019-05-01  2019-04-25   2019-04-02
2 2019-05-03   2019-05-02  2019-04-26   2019-04-03

出于某种原因,我不得不采取额外的步骤将其转换为datetime列,也许有人可以修改代码以使其更简单

df.P1_lastweek = pd.to_datetime(df.P1_lastweek)
df.P1_yesterday = pd.to_datetime(df.P1_yesterday)
df.P1_lastmonth = pd.to_datetime(df.P1_lastmonth)

现在,您可以根据需要使用访问器来获取所需的编号。

df.P1_lastweek.dt.day

0    24
1    25
2    26
Name: P1_lastweek, dtype: int64