【问题标题】:Grouping by and get details of every group in data frame分组并获取数据框中每个组的详细信息
【发布时间】:2017-04-23 23:40:11
【问题描述】:

我有一张这样的桌子:

   user   week  message  col2
   ----  -----  ----     ----
     A     1     Hi       30
     A     1     Hello    30
     A     2     To       30
     A     2     From     40
     B     1     call     30
     B     1     should   20
     B     2     sadas    50

我需要先按用户分组,然后按周分组并处理一些数据。

例如:

    for user in everyUser:
        for week in everyWeek:
             week_data = list of all messages of the week.

需要在 Pandas 中执行类似操作,将其加载到数据框中后,我按用户和周对数据进行了分组,分组后我不知道如何访问数据。

还有,一旦我们对数据进行分组,我们如何访问用户的数据?

非常感谢任何帮助!

【问题讨论】:

    标签: python sql pandas dataframe


    【解决方案1】:

    您可以使用groupby.apply 模式;一般来说,apply 接受一个函数,并从分组数据帧的每一组中获取数据作为参数;在这种情况下,如果您只关心message,请使用[] 提取列,并将list 函数应用于每个用户的消息,这将为用户提供相应周的消息列表:

    df.groupby(['user', 'week'])['message'].apply(list)
    
    #user  week
    #A     1          [Hi, Hello]
    #      2           [To, From]
    #B     1       [call, should]
    #      2              [sadas]
    #Name: message, dtype: object
    

    【讨论】:

    • 完美,谢谢。等待完成 5 分钟,以便我将其标记为正确。
    • 关于如何做 group.get_group['col_name'] 并获得价值作为列表的任何想法?
    【解决方案2】:
    #create your group
    group = df.groupby(by=['user','week'])
    
    #print all the groups and values
    for k,v in group:
        print(k)
        print(v)
    #get a group by the group key (user,week)    
    group.get_group(('A', 1))   
    Out[134]: 
      user  week message  col2
    0    A     1      Hi    30
    1    A     1   Hello    30
    

    【讨论】:

    • 有没有办法在 group.get_group 之后只提取一列作为列表?
    • group.get_group(('A', 1)).message.tolist()
    • 哇,太棒了。浪费了一个多小时才弄明白。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多