python pandas列表中几列的分组行

问题描述 投票:0回答:2

我有如下所示的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来完成?

谢谢

python-3.x pandas pandas-groupby
2个回答
0
投票

用途:

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]

0
投票

您可以将df.meltdf.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'}))
© www.soinside.com 2019 - 2024. All rights reserved.