如何在大熊猫中进行分组比的第一个和最后一个观察并广播数据框

时间:2018-09-26 11:58:53

标签: python pandas

我在熊猫中有以下数据框

  Date          time         tank        stock
  01-01-2018    05:30:00     1           4567
  01-01-2018    03:30:00     1           2345
  01-01-2018    04:30:00     1           1234
  01-01-2018    08:00:00     1           3345
  02-01-2018    06:30:00     2           4489
  02-01-2018    03:30:00     2           1290
  02-01-2018    11:30:00     2           6578
  02-01-2018    10:00:00     2           3444

我想用日期,时间和储罐对数据框进行排序,然后从库存中进行第一个和最后一个观察。

 Sorted Dataframe

  Date          time         tank        stock
  01-01-2018    03:30:00     1           2345
  01-01-2018    04:30:00     1           1234
  01-01-2018    08:00:00     1           3345
  01-01-2018    05:30:00     1           4567
  02-01-2018    03:30:00     2           1290
  02-01-2018    06:30:00     2           4489
  02-01-2018    10:00:00     2           3444
  02-01-2018    11:30:00     2           6578

  Desired dataframe

  Date          tank    first_stock    last_stock
  01-01-2018    1       2345           4567
  02-01-2018    2       1290           6578

为了排序,我在python中使用以下脚本

 df = df.groupby(['Date','tank']).apply(lambda x: x.sort_values(['time'],ascending = True))

但是,如何获得最终的数据帧?

1 个答案:

答案 0 :(得分:3)

使用sort_values并指定所有3列,然后汇总firstlast

const object = {
  a: {
    b: [
      'something',
      { c: 'the thing that I need' }
    ],
  },
};
const path = [ 'a', 'b', '1', 'c' ];
const result = path.reduce(( source, next ) => source[ next ], object );
console.log( result );

详细信息:

df = (df.sort_values(['Date','tank', 'time'])
        .groupby(['Date','tank'])['stock']
        .agg(['first','last'])
        .reset_index())
print (df)
         Date  tank  first  last
0  01-01-2018     1   2345  3345
1  02-01-2018     2   1290  6578