我有以下数据框:
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
Week
等39
值。
你能告诉我怎么做吗?
修改
我从@ 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
答案 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
列的特定值进行更改,并且它不是唯一的,我现在看到的唯一方法是相同但迭代。