首页 > 解决方案 > Pandas Group 然后移动列并保留最后一行

问题描述

我想对列idx进行分组,然后移动列val并将最后一行保留为idx

import pandas as pd

df = pd.DataFrame({'idx':['a','a','b','b'],
                   'val':['a1','a2','b1','b2']})

df

   idx  val
0   a   a1
1   a   a2
2   b   b1
3   b   b2

我试过了df['val_shift'] = df.groupby('idx').val.shift(1)

   idx  val val_shift
0   a   a1  NaN
1   a   a2  a1
2   b   b1  NaN
3   b   b2  b1

但我想要。

   idx  val
0   a   NaN
1   a   a1
2   a   a2
3   b   NaN
4   b   b1
5   b   b2

有没有办法得到这个?

标签: pandasdataframe

解决方案


在我看来,您只是在每个仅'idx'填充的组前面推了一个空数据框。

pd.concat([
    d[['idx']].head(1).append(d)
    for _, d in df.groupby('idx')
], ignore_index=True)    

  idx  val
0   a  NaN
1   a   a1
2   a   a2
3   b  NaN
4   b   b1
5   b   b2

选择

df[['idx']].drop_duplicates('idx').append(df).sort_values('idx').reset_index(drop=True)

推荐阅读