我在pandas中有以下数据框:
Name|Date|Value
"Bob"|2015-07-08|1
"Bob"|2015-08-10|2
"Bob"|2015-09-14|3
"Sam"|2015-10-02|1
"Sam"|2015-11-08|2
我想在每一行之前计算一行,这是对下一行的简单转换(从“Date”(日期时间对象)中减去1天,并将“值”减少1)。像这样:
Name|Date|Value
"Bob"|2015-07-07|0
"Bob"|2015-07-08|1
"Bob"|2015-08-09|1
"Bob"|2015-08-10|2
"Bob"|2015-09-13|2
"Bob"|2015-09-14|3
"Sam"|2015-10-01|0
"Sam"|2015-10-02|1
"Sam"|2015-11-07|1
"Sam"|2015-11-08|2
我怎样才能做到这一点?
答案 0 :(得分:1)
我会将您的操作应用到DataFrame
的副本并重叠在一起 - 就像这样:
In [54]: df2 = df.copy()
In [55]: df2['Date'] = df2['Date'] - pd.Timedelta(1, 'd')
...: df['Value'] = df['Value'] - 1
...:
In [60]: pd.concat([df, df2], keys=[0,1]).swaplevel(0,1).sort_index()
Out[60]:
Name Date Value
0 0 Bob 2015-07-08 0
1 Bob 2015-07-07 1
1 0 Bob 2015-08-10 1
1 Bob 2015-08-09 2
2 0 Bob 2015-09-14 2
1 Bob 2015-09-13 3
3 0 Sam 2015-10-02 0
1 Sam 2015-10-01 1
4 0 Sam 2015-11-08 1
1 Sam 2015-11-07 2
keys
和swaplevel
部分并非绝对必要,但它会阻止Index
重复,这通常更容易使用。