为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕雪6442864 2022-05-24 15:51:19
说我有一个数据框         Date   A   B0  2019-05-02  12  231  2019-05-02  23  132  2019-05-02  12  133  2019-05-03  12  13如果我想按日期分组并应用列 A 上的设置,我可以通过A_df = test_df.groupby(['Date'])['A'].apply(set)给出结果Date2019-05-02    {12, 23}2019-05-03        {12}同样,我可以为 B 做这件事。B_df = test_df.groupby(['Date'])['B'].apply(set)这给出了结果。Date2019-05-02    {13, 23}2019-05-03        {13}如何创建一个集合是从 A 列和 B 列的内容创建的?期望的输出可以被认为是上述输出的联合。Date2019-05-02    {12, 13, 23}2019-05-03        {12, 13}
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超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)))

 Date

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

2019-05-03        {12, 13}

Name: AB, dtype: object


查看完整回答
反对 回复 2022-05-24
?
侃侃无极

TA贡献2051条经验 获得超10个赞

试试下面的代码,希望这会有所帮助:


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}}


查看完整回答
反对 回复 2022-05-24
?
holdtom

TA贡献1805条经验 获得超10个赞

矩阵有几种方法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()))


查看完整回答
反对 回复 2022-05-24
  • 3 回答
  • 0 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信