代码之家  ›  专栏  ›  技术社区  ›  Nikko

Pandas Groupby,多索引,多列

  •  2
  • Nikko  · 技术社区  · 6 年前

    我刚刚使用.transform()创建了一些列来计算一些条目。 I used this reference.

    例如:

              userID deviceName  POWER_DOWN  USER  LOW_RSSI  NONE  CMD_SUCCESS  
    0         24      IR_00          85     0        39     0            0   
    1         24      IR_00          85     0        39     0            0   
    2         24      IR_00          85     0        39     0            0   
    3         24      IR_00          85     0        39     0            0   
    4         25     BED_08           0   109        78     0            0   
    5         25     BED_08           0   109        78     0            0   
    6         25     BED_08           0   109        78     0            0   
    7         24      IR_00          85     0        39     0            0   
    8         23      IR_09           2     0         0     0            0   
    9         23     V33_17           3     0         2     0          134   
    10        23     V33_17           3     0         2     0          134   
    11        23     V33_17           3     0         2     0          134   
    12        23     V33_17           3     0         2     0          134   
    

    我想按用户名和设备名对它们进行分组? 所以它看起来像:

              userID deviceName  POWER_DOWN  USER  LOW_RSSI  NONE  CMD_SUCCESS  
    0         23      IR_09           2     0         0     0            0
    1                V33_17           3     0         2     0          134
    2         24      IR_00          85     0        39     0            0
    3         25     BED_08           0   109        78     0            0
    

    我还希望它们按userID排序,并可能将userID和deviceName作为多索引。

    我试过了 df = df.groupby(['userID', 'deviceName']) 但是返回了 <pandas.core.groupby.DataFrameGroupBy object at0x00000249BBB13DD8> . 不是数据帧。

    顺便说一下,对不起。我不知道怎么把一本笔记本抄进去抄出来。

    1 回复  |  直到 6 年前
        1
  •  3
  •   jezrael    6 年前

    我相信需要 drop_duplicates 具有 sort_values :

    df1 = df.drop_duplicates(['userID', 'deviceName']).sort_values('userID')
    print (df1)
       userID deviceName  POWER_DOWN  USER  LOW_RSSI  NONE  CMD_SUCCESS
    8      23      IR_09           2     0         0     0            0
    9      23     V33_17           3     0         2     0          134
    0      24      IR_00          85     0        39     0            0
    4      25     BED_08           0   109        78     0            0
    

    如果要创建 MultiIndex 添加 set_index :

    df1 = (df.drop_duplicates(['userID', 'deviceName'])
             .sort_values('userID')
             .set_index(['userID', 'deviceName']))
    print (df1)
                       POWER_DOWN  USER  LOW_RSSI  NONE  CMD_SUCCESS
    userID deviceName                                               
    23     IR_09                2     0         0     0            0
           V33_17               3     0         2     0          134
    24     IR_00               85     0        39     0            0
    25     BED_08               0   109        78     0            0