基于特定列的值,Pandas将DataFrame中的行进行分组

15

我有一个数据框如下所示,

Input DataFrame
     gw_mac                 mac
 0   ac233fc015f6           dce83f3bc820
 1   ac233fc015f6           ac233f264a4c
 2   ac233fc015f6           ac233f264a4c
 3   ac233fc015f6           dce83f3bc820
 4   ac233fc015f6           ac233f264a4c
 5   ac233fc015f6           ac233f264a4c
 6   ac233fc015f6           dce83f3bc820
 7   ac233fc015f6           e464eecba5eb
现在我需要基于“gw_mac”和“mac”列的值对数据框进行分组,并应该得到以下三个不同的组。
Expected Output
Group1

     gw_mac                 mac
 0   ac233fc015f6           dce83f3bc820
 3   ac233fc015f6           dce83f3bc820
 6   ac233fc015f6           dce83f3bc820

Group2
      gw_mac                 mac
  1   ac233fc015f6           ac233f264a4c
  2   ac233fc015f6           ac233f264a4c
  4   ac233fc015f6           ac233f264a4c
  5   ac233fc015f6           ac233f264a4c

Group3
      gw_mac                 mac
  7   ac233fc015f6           e464eecba5eb

2
按照这两列对数据框进行分组将返回所需的组。您想如何聚合它们?list(df.groupby(['gw_mac','mac'])) - Vaishali
@Vaishali,分组应该返回数据框。 - Mahamutha M
2个回答

12

如果需要按列分组,请使用 groupby 对象进行循环:

for i, g in df.groupby(['gw_mac','mac']):
    print (g)
         gw_mac           mac
1  ac233fc015f6  ac233f264a4c
2  ac233fc015f6  ac233f264a4c
4  ac233fc015f6  ac233f264a4c
5  ac233fc015f6  ac233f264a4c
         gw_mac           mac
0  ac233fc015f6  dce83f3bc820
3  ac233fc015f6  dce83f3bc820
6  ac233fc015f6  dce83f3bc820
         gw_mac           mac
7  ac233fc015f6  e464eecba5eb

1
这会是一个耗时的任务吗? - Mahamutha M
2
@MahamuthaM - 它只是在循环,取决于接下来需要做什么。 - jezrael

5
你可以尝试使用以下方法创建一个包含唯一组的数据框字典:
df['Group'] = df.groupby(['gw_mac', 'mac']).cumcount()

dfs = dict(tuple(df.groupby('Group')))

您可以使用以下方式访问一个组:

dfs[0]

    gw_mac          mac             Group
0   ac233fc015f6    dce83f3bc820    0
1   ac233fc015f6    ac233f264a4c    0
7   ac233fc015f6    e464eecba5eb    0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接