Pandas Groupby,MultiIndex,多列

时间:2018-07-31 06:29:23

标签: python pandas pandas-groupby

我只是使用.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和deviceName成为多索引。

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

对不起,对不起。我不知道如何进出Jupyter笔记本。

1 个答案:

答案 0 :(得分:3)

我认为需要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
相关问题