我有如下所示的Pandas DataFrame:
id a b c col
1 a 1 2 Null 'aa'
2 a 2 2 3 'aa'
3 b 4 3 1 'bb'
4 c 1 Null 3 'gg'
5 c Null 2 Null 'gg'
我想按列分组以获取以下内容:
id new_col col
1 a [1, 2, 2, 2, 3] 'aa'
2 b [4, 3, 1] 'bb'
3 c [1, 3, 2] 'gg'
是否可以使用pd.groupby来完成?
谢谢
用途:
df = df.replace('Null', np.nan)
c = df.columns.difference(['id','col'])
df = df.groupby(['id','col'])[c].apply(lambda x: x.stack().dropna().tolist()).reset_index(name='new_col')
print (df)
id col new_col
0 a 'aa' [1, 2, 2, 2, 3]
1 b 'bb' [4, 3, 1]
2 c 'gg' [1, 3, 2]
您可以将df.melt
与df.melt
一起使用:
groupby+agg
final = (df.replace('Null',np.nan).melt(['id','col'],value_name='new_col').groupby('id'
,as_index=False).agg({'new_col':lambda x: x.dropna().tolist(),'col':'first'}))