【发布时间】:2018-05-14 17:23:03
【问题描述】:
我有一个包含日期的列表。看起来是这样的:
[datetime.date(1994, 2, 4),
datetime.date(1994, 3, 22),
datetime.date(1994, 4, 18),
datetime.date(1994, 5, 17),
datetime.date(1994, 8, 16)
...]
和看起来像这样的熊猫df:
Date USD_I
0 1971-01-04 100.0000
1 1971-01-05 99.9700
2 1971-01-06 99.9500
3 1971-01-07 99.9400
4 1971-01-08 99.9300
5 1971-01-11 99.9100
6 1971-01-12 99.8900
7 1971-01-13 99.9000
8 1971-01-14 99.8300
and so on
我正在尝试构建一个新的 df,它应该如下所示:
1994-02-04 1994-03-22 1994-04-18 ...
-2
-1
0
1
2
“0”行中“1994-02-04”列的值应该是该日期从第一个 df 开始的值(“USD_I”列)。 “-1”行的值应该是前一天的值,“1”行的值应该是第二天的值,依此类推。简单地说,列是列表中的值,新 df 的值是来自第一个 df 的数据切片。
我正在尝试第二天这样做,但我仍然遇到索引错误并且无法在线找到解决方案。我将非常感谢任何帮助并提示如何处理它。
我正在尝试使用('result' 是最终 df 的名称):
for i in list:
result[i] = df[df['Date']==i]['USD_I']
这给了我一个以日期作为列名的数据框,这很好,但第一行只有第一个日期的值,其他的是 NaN,所以我删除了整行并尝试:
for i in result:
for x in range(-2,3):
result.loc[x,i] = df.loc[(df[df['Date']==i].index.values+x),'USD_I']
但这给了我ValueError: Incompatible indexer with Series。
【问题讨论】:
-
您遇到什么错误?您是否使用
datetime.timedelta来增加/减少天数? -
在您的输出数据框中,值应该是什么?它看起来只有一个索引和列
-
@Marmaduke 我在帖子中添加了更多详细信息以及我尝试这样做的方式。
-
@MattR “0”行中“1994-02-04”列的值应该是该日期从第一个 df(“USD_I”列)开始的值。 “-1”行的值应该是前一天的值,“1”行的值应该是第二天的值,依此类推。简单地说,列是列表中的值,新 df 的值是来自第一个 df 的数据切片。
标签: python pandas indexing slice