【问题标题】:Pandas Groupby, MultiIndex, Multiple ColumnsPandas Groupby、MultiIndex、多列
【发布时间】:2018-07-31 14:35:04
【问题描述】:

我刚刚使用 .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   

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

          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

我还希望它们按用户 ID 排序,并可能将用户 ID 和设备名称设为多索引。

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

顺便说一句,对不起。我不知道如何将 Jupyter notebook 复制进出。

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    我相信需要drop_duplicatessort_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
    

    【讨论】:

    • 我还会添加df.reset_index() 以便索引具有连续值。
    • @sophros - 是的,如果不是MultiIndex,则必须省略.set_index()
    猜你喜欢
    • 2017-04-06
    • 1970-01-01
    • 2018-10-28
    • 2021-05-18
    • 2021-04-04
    • 2023-03-25
    • 2018-03-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多