使用pandas聚合Target列的过去和当前值(每月数据)

时间:2017-11-02 10:01:39

标签: python-3.x pandas

我在pandas中有这样的数据框,

EMP_ID| Date|    Target_GWP
1     | Jan-2017|    100
2     | Jan 2017|    300
1     | Feb-2017|    500
2     | Feb-2017|    200

我需要以下面的形式打印输出。

EMP_ID| Date|    Target_GWP | past_Target_GWP
1     | Feb-2017|    600    |100
2     | Feb-2017|    500    |300

基本上我有每月数据进入excel,我想为每个EMP_ID聚合这个Target_GWP与最新(当前月份),并且必须在过去一个月的Target_GWP中为pandas数据帧创建一个备份列。那么我将如何支持过去一个月的target_GWP并将其添加到当前月份目标GWP

任何关于此的线索都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

使用:

#convert to datetime
df['Date'] = pd.to_datetime(df['Date'])

#sorting and get last 2 rows
df = df.sort_values(['EMP_ID','Date']).groupby('EMP_ID').tail(2)
#aggregation
df = df.groupby('EMP_ID', as_index=False).agg({'Date':'last', 'Target_GWP':['sum','first']})
df.columns = ['EMP_ID','Date','Target_GWP','past_Target_GWP']
print (df)
   EMP_ID       Date  Target_GWP  past_Target_GWP
0       1 2017-02-01         600              100
1       2 2017-02-01         500              300

或者如果需要Target_GWP中的最高价值而不是sum使用last

df = df.groupby('EMP_ID', as_index=False).agg({'Date':'last', 'Target_GWP':['last','first']})
df.columns = ['EMP_ID','Date','Target_GWP','past_Target_GWP']
print (df)
   EMP_ID       Date  Target_GWP  past_Target_GWP
0       1 2017-02-01         500              100
1       2 2017-02-01         200              300