在dataframe中的每一行之后添加计算行

时间:2015-09-12 02:58:32

标签: python pandas

我在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

我怎样才能做到这一点?

1 个答案:

答案 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

keysswaplevel部分并非绝对必要,但它会阻止Index重复,这通常更容易使用。