Python 3.x python中列表中若干列的groupby行

Python 3.x python中列表中若干列的groupby行,python-3.x,pandas,pandas-groupby,Python 3.x,Pandas,Pandas Groupby,我有一个数据框,看起来像: 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_c

我有一个数据框,看起来像:

    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执行此操作

感谢

所有未在列表中指定的列使用:

与列表中未指定的所有列一起使用:

您可以使用:

或者先使用set_索引,然后使用groupby+agg

您可以使用:

或者先使用set_索引,然后使用groupby+agg

df = df.replace('Null', np.nan)

c = df.columns.difference(['id','col'])
f = lambda x: x.stack().tolist()
df = df.groupby(['id','col'])[c].apply(f).reset_index(name='new_col')[['id','new_col','col']]
print (df)
  id          new_col   col
0  a  [1, 2, 2, 2, 3]  'aa'
1  b        [4, 3, 1]  'bb'
2  c        [1, 3, 2]  'gg'
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'}))
final1 = (df.replace('Null',np.nan).set_index(['id','col']).stack().rename('new_col')
       .reset_index('col').groupby(level=0).agg({'new_col':list,'col':'first'}))
  id          new_col   col
0  a  [1, 2, 2, 2, 3]  'aa'
1  b        [4, 3, 1]  'bb'
2  c        [1, 2, 3]  'gg'
df["d"] = df[['a', 'b', 'c']].values.tolist()
dup = df.groupby(['id','col'])['d'].sum().reset_index(name='new_col')