gpt4 book ai didi

python - Pandas 中的嵌套分组

转载 作者:行者123 更新时间:2023-12-04 12:57:44 32 4
gpt4 key购买 nike

问题
考虑以下数据框:

import pandas as pd
from io import StringIO
data = StringIO(""",ID,category,app,duplicated
0,100,OperatingSystem,Finder,FALSE
1,100,Browser,Chrome,FALSE
2,100,Browser,Chrome,TRUE
3,100,Browser,Chrome,FALSE
4,100,Clipboard,Clipboard,FALSE
5,200,Browser,Chrome,FALSE
6,200,Browser,Chrome,TRUE
7,200,Browser,Chrome,FALSE
8,200,Clipboard,Clipboard,FALSE
9,300,OperatingSystem,Finder,FALSE
10,300,Browser,Chrome,TRUE
11,300,OperatingSystem,Finder,FALSE
12,300,Clipboard,Clipboard,FALSE
""" )
df_stack = pd.read_csv(data, index_col=0).fillna('')
使用来自 this answer 的代码
s = df_stack.groupby('ID')['duplicated'].apply(lambda d : d.ne(d.shift()).cumsum())
d_groups = df_stack.groupby(s)
for g, dataframes in d_groups:
print(f"\n[Group {g}] - {dataframes['duplicated'].unique()[0]} \n{'-'*20}")
for index,row in dataframes.iterrows():
print(index, row['duplicated'], row['category'], row['app'])
我得到 3 个不同的组,如下图所示,遵循以下条件:
  • A组:对于每个ID,所有False行直到该ID的第一个True行
  • B组:所有真行
  • C组:对于每个ID,该ID的最后一个True行之后的所有False行

  • 我想要的是
    我要 按类别分组 A、B、C 为了获得总共6组(图像右侧)。
    enter image description here
    编辑:我用双 for 循环解决了这个问题,循环了 d_groups并对内部组进行分组。有没有更有效的解决方案?

    最佳答案

    我想你只需要groupby数据框 df_stacks连同 category以获得所需的结果,而不是仅按 s 分组:

    d_groups = df_stack.groupby(s)
    您应该groupbys连同 category栏目:
    d_groups = df_stack.groupby([s, 'category'])
    结果:
    [Group (1, 'Browser')] - False 
    --------------------
    1 100 False Browser Chrome
    5 200 False Browser Chrome

    [Group (1, 'OperatingSystem')] - False
    --------------------
    0 100 False OperatingSystem Finder
    9 300 False OperatingSystem Finder

    [Group (2, 'Browser')] - True
    --------------------
    2 100 True Browser Chrome
    6 200 True Browser Chrome
    10 300 True Browser Chrome

    [Group (3, 'Browser')] - False
    --------------------
    3 100 False Browser Chrome
    7 200 False Browser Chrome

    [Group (3, 'Clipboard')] - False
    --------------------
    4 100 False Clipboard Clipboard
    8 200 False Clipboard Clipboard
    12 300 False Clipboard Clipboard

    [Group (3, 'OperatingSystem')] - False
    --------------------
    11 300 False OperatingSystem Finder

    关于python - Pandas 中的嵌套分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64154926/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com