2015-09-12 52 views
2

计算每一行后的行我已经在大熊猫以下数据框:附加在数据帧

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 

我想计算的行,每行,这是下一行的简单改造前(减去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 

我该如何做到这一点?

回答

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 

keysswaplevel部分是不是绝对必要的,但它可以防止具有重复的Index ,这通常更容易处理。

+0

您可以重置索引作为最后一步。 – Alexander