【问题标题】:Pandas group the rows in a dataframe based on specific column valuePandas 根据特定列值对数据框中的行进行分组
【发布时间】:2019-03-19 12:05:50
【问题描述】:

我的数据框如下图,

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

【问题讨论】:

  • 按两列对数据框进行分组将返回所需的组。你想如何聚合它们? list(df.groupby(['gw_mac', 'mac']))
  • @Vaishali,分组应作为数据框返回

标签: python pandas grouping


【解决方案1】:

如果需要不同的分组按列循环 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

【讨论】:

  • 这会很耗时吗?
  • @MahamuthaM - 它只是循环,这取决于下一步需要做什么。
【解决方案2】:

您可以尝试使用此方法创建具有唯一组的数据框字典,

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

【讨论】:

    猜你喜欢
    • 2022-07-11
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2012-11-06
    • 2023-03-08
    相关资源
    最近更新 更多