在 Pandas groupby 操作之后组合一组中的两列

说我有一个数据框


         Date   A   B

0  2019-05-02  12  23

1  2019-05-02  23  13

2  2019-05-02  12  13

3  2019-05-03  12  13

如果我想按日期分组并应用列 A 上的设置,我可以通过


A_df = test_df.groupby(['Date'])['A'].apply(set)

给出结果


Date

2019-05-02    {12, 23}

2019-05-03        {12}

同样,我可以为 B 做这件事。


B_df = test_df.groupby(['Date'])['B'].apply(set)

这给出了结果。


Date

2019-05-02    {13, 23}

2019-05-03        {13}

如何创建一个集合是从 A 列和 B 列的内容创建的?期望的输出可以被认为是上述输出的联合。


Date

2019-05-02    {12, 13, 23}

2019-05-03        {12, 13}


慕雪6442864
浏览 246回答 3
3回答

慕森王

您可以stack()然后执行以下操作groupby():df.set_index('Date').stack().reset_index(0,name='AB').groupby('Date')['AB'].apply(set)#Alternate sol with itertools#df.groupby('Date').apply(lambda x: set(itertools.chain.from_iterable(x[['A','B']].values))) Date2019-05-02    {12, 13, 23}2019-05-03        {12, 13}Name: AB, dtype: object

侃侃无极

试试下面的代码,希望这会有所帮助:dic = {}for date in set(test_df['Date']):    dic[date] = set(A_df.get_group(date)['A']).union(set(A_df.get_group(date)['B']))输出将是:{'2019-05-02': {12, 13, 23}, '2019-05-03': {12, 13}}

holdtom

矩阵有几种方法flatten,例如stack,melt或者只是flatten使用 numpy 数组。df.set_index('Date').groupby('Date').apply(lambda x:set(x.values.flatten()))df.set_index('Date').groupby('Date').apply(lambda x:set(x.stack()))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python