gpt4 book ai didi

Pandas 组然后移动列并保留最后一行

转载 作者:行者123 更新时间:2023-12-01 07:50:43 25 4
gpt4 key购买 nike

我要分组列 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

有没有办法得到这个?

最佳答案

相信您需要 concat drop_duplicates 提取的最后几行首先更改索引值以获得正确的排序,因为 shift始终在此处删除最后一个值:

df1 = df.drop_duplicates('idx', keep='last')
df1.index += .5

df = pd.concat([df, df1]).sort_index().reset_index(drop=True)

替代解决方案:
df = df.drop_duplicates('idx', keep='last').append(df).sort_index().reset_index(drop=True)

df['val_shift'] = df.groupby('idx').val.shift(1)
print (df)
idx val val_shift
0 a a1 NaN
1 a a2 a1
2 a a2 a2
3 b b1 NaN
4 b b2 b1
5 b b2 b2

如果要删除 valshift使用 pop 带语法糖 - 按系列分组 df['idx'] :
df['val_shift']  = df.pop('val').groupby(df['idx']).shift(1)
print (df)
idx val_shift
0 a NaN
1 a a1
2 a a2
3 b NaN
4 b b1
5 b b2

关于 Pandas 组然后移动列并保留最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53263226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com