2015-09-12 50 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