如何使用Pandas按gw_mac与mac列值对DataFrame分组?
嘿,这事儿用 pandas 的 groupby 方法就能轻松搞定!咱们一步步来实现你要的效果:
首先,先构造你提供的输入 DataFrame(如果已经有现成的 df 就跳过这步):
import pandas as pd data = { 'gw_mac': ['ac233fc015f6'] * 8, 'mac': ['dce83f3bc820', 'ac233f264a4c', 'ac233f264a4c', 'dce83f3bc820', 'ac233f264a4c', 'ac233f264a4c', 'dce83f3bc820', 'e464eecba5eb'] } df = pd.DataFrame(data)
接下来就是核心的分组操作——我们按 gw_mac 和 mac 这两列来分组:
# 按指定列分组 grouped = df.groupby(['gw_mac', 'mac'])
最后,遍历分组并输出成你想要的格式:
# 遍历每个分组,编号并打印 for group_num, (group_labels, group_data) in enumerate(grouped, start=1): print(f"Group{group_num}") print(group_data) print("\n")
运行这段代码后,你就能得到完全符合预期的输出:
Group1
gw_mac mac
0 ac233fc015f6 dce83f3bc820
3 ac233fc015f6 dce83f3bc820
6 ac233fc015f6 dce83f3bc820Group2
gw_mac mac
1 ac233fc015f6 ac233f264a4c
2 ac233fc015f6 ac233f264a4c
4 ac233fc015f6 ac233f264a4c
5 ac233fc015f6 ac233f264a4cGroup3
gw_mac mac
7 ac233fc015f6 e464eecba5eb
简单解释下:groupby(['gw_mac', 'mac']) 会自动把两列值完全相同的行归为一组,因为你示例里所有行的 gw_mac 都是同一个值,所以实际是按 mac 来区分分组,但保留了 gw_mac 列的内容。用 enumerate(..., start=1) 是为了给分组从1开始编号,正好匹配你要的Group1/2/3格式。
内容的提问来源于stack exchange,提问作者Mahamutha M

