新列中前一周的值

时间:2016-11-26 08:58:14

标签: python pandas

我有以下数据框:

                    Open    High    Low     Last    Vol_POC Week
Timestamp                       
2016-09-27 02:00:00 165.50  165.58  165.46  165.47  165.98  39
2016-09-27 03:00:00 165.47  165.65  165.46  165.63  165.98  39
2016-09-27 04:00:00 165.64  165.92  165.59  165.91  165.98  39
2016-09-27 05:00:00 165.91  166.13  165.91  165.97  165.98  39
2016-09-27 06:00:00 165.98  165.98  165.76  165.78  165.98  39
2016-09-27 07:00:00 165.79  166.04  165.79  166.02  165.98  39

Week值是使用以下代码创建的:

data['Week']=[r.week for r in data.index]

我现在想要一个新列Vol_POC_last_week给出前一周Vol_POC的值。例如,Week值为40的任何行我都会Vol_POC Week39值。

你能告诉我怎么做吗?

修改

我从@ I159那里得到了答案并用DateOffset进行了修改。 data['last_week'] = pd.Index(data.index).to_datetime() - pd.offsets.Week(1) data['Prior VPOC'] = data.loc[data.last_week, "Vol POC"].values

1 个答案:

答案 0 :(得分:0)

我会这样做:

data["Vol_POC_last_week"] = pd.Series()                                               
data.loc[data.Week == 40, "Vol_POC_last_week"] = data.loc[data.Week == 39, "Vol_POC"].values

pandas.DataFrame.loc

  

DataFrame.loc   纯粹基于标签位置的索引器,用于按标签选择。

.loc属性是主要访问方法,可以访问值而不是副本。

它有简单明了的界面:

.loc[row_indexer,column_indexer]

多行更改

for i in data.Week.unique()[:-1]:
    data.loc[data.Week == i, "Vol_POC_last_week"] = data.loc[data.Week == i-1, "Vol_POC"].values

由于我们需要根据Week列的特定值进行更改,并且它不是唯一的,我现在看到的唯一方法是相同但迭代。