我有以下熊猫数据框
index key start end nozzle tank
0 2018-01-01 02:00:01 - 02:30:00_1_1 2000 2003 1 1
1 2018-01-01 02:00:01 - 02:30:00_1_1 2003 2006 1 1
2 2018-01-01 02:00:01 - 02:30:00_1_1 2006 2008 1 1
3 2018-01-01 02:00:01 - 02:30:00_1_1 2008 2010 1 1
4 2018-01-01 02:00:01 - 02:30:00_1_1 2010 2012 1 1
5 2018-01-01 02:00:01 - 02:30:00_1_2 2002 2009 2 1
6 2018-01-01 02:00:01 - 02:30:00_1_2 2009 2011 2 1
7 2018-01-01 02:00:01 - 02:30:00_1_2 2011 2013 2 1
8 2018-01-01 02:00:01 - 02:30:00_1_2 2013 2015 2 1
9 2018-01-01 03:30:01 - 04:00:00_1_3 2020 2022 3 1
现在,我想对每个键进行第一个和最后一个观察,并找出差异,如果只有一个键观察,则应该计算同一观察的end - start
之间的差异。
计算为
for nozzle 1 = 2012-2000 = 12
nozzle 2 = 2015-2002 = 13
我想要的数据框是
index key nozzle_1 nozzle_2 nozzle_3
0 2018-01-01 02:00:01 - 02:30:00_1_1 12 0 0
1 2018-01-01 02:00:01 - 02:30:00_1_2 0 13 0
2 2018-01-01 03:30:01 - 04:00:00_1_3 0 0 2
答案 0 :(得分:2)
使用:
df1 = (df.groupby(['key','nozzle'])
.agg({'start':'first','end':'last'})
.assign(dif = lambda x: x['end'] - x['start'])['dif']
.unstack(fill_value=0)
.add_prefix('nozzle_')
.reset_index()
.rename_axis(None, axis=1))
print (df1)
key nozzle_1 nozzle_2 nozzle_3
0 2018-01-01 02:00:01 - 02:30:00_1_1 12 0 0
1 2018-01-01 02:00:01 - 02:30:00_1_2 0 13 0
2 2018-01-01 03:30:01 - 04:00:00_1_3 0 0 2
说明:
agg
与first
进行汇总
和last
assign
减去后创建新列unstack
重塑add_prefix
更改列名称reset_index
和rename_axis
清除数据最后一次