我在熊猫中有以下数据框:
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天,并将“ Value”减少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
我怎样才能做到这一点?
我会将您的操作应用于的副本,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
与重复,这往往更易于使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句