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')