pandas groupby之后出现缺失列

11

我有一个pandas的数据框df。我将它按照3个列进行分组,并计算结果。在这样做时,我会丢失一些信息,特别是name列。该列与desk_id列呈1:1映射关系。是否有办法在我的最终数据框中同时包含这两列?

以下是数据框:

   shift_id    shift_start_time      shift_end_time        name                   end_time       desk_id  shift_hour
0  37423064 2014-01-17 08:00:00 2014-01-17 12:00:00  Adam Scott 2014-01-17 10:16:41.040000  15557987           2
1  37423064 2014-01-17 08:00:00 2014-01-17 12:00:00  Adam Scott 2014-01-17 10:16:41.096000  15557987           2
2  37423064 2014-01-17 08:00:00 2014-01-17 12:00:00  Adam Scott 2014-01-17 10:52:17.402000  15557987           2
3  37423064 2014-01-17 08:00:00 2014-01-17 12:00:00  Adam Scott 2014-01-17 11:06:59.083000  15557987           3
4  37423064 2014-01-17 08:00:00 2014-01-17 12:00:00  Adam Scott 2014-01-17 08:27:57.998000  15557987           0

我把它分成了这样:

grouped = df.groupby(['desk_id', 'shift_id', 'shift_hour']).size()
grouped = grouped.reset_index()

以下是结果,缺少name列。

    desk_id  shift_id  shift_hour  0
0  14468690  37729081           0  7
1  14468690  37729081           1  3
2  14468690  37729081           2  6
3  14468690  37729081           3  5
4  14468690  37729082           0  5

还有,有没有办法将计数列的名称重命名为“count”而不是“0”?

1个回答

5
您需要在分组中包含'name'groupby
In [43]:

grouped = df.groupby(['desk_id', 'shift_id', 'shift_hour', 'name']).size()
grouped = grouped.reset_index()
grouped.columns=np.where(grouped.columns==0, 'count', grouped.columns) #replace the default 0 to 'count'
print grouped
    desk_id  shift_id  shift_hour        name  count
0  15557987  37423064           0  Adam Scott      1
1  15557987  37423064           2  Adam Scott      3
2  15557987  37423064           3  Adam Scott      1

如果名称到ID的关系是多对一的类型,例如我们有相同数据集中的一个Pete Scott,则结果将变为:
    desk_id  shift_id  shift_hour        name  count
0  15557987  37423064           0  Adam Scott      1
1  15557987  37423064           0  Pete Scott      1
2  15557987  37423064           2  Adam Scott      3
3  15557987  37423064           2  Pete Scott      3
4  15557987  37423064           3  Adam Scott      1
5  15557987  37423064           3  Pete Scott      1

这个术语没有再次分组吗?如果namedesk_id之间不是1:1映射,这仍然能给我想要的结果吗? - user3439329
结果将包括与相同desk_id或shift_id的其他名称。 - CT Zhu
7
所以,如果我想把“shift_start_time”也包含在最终结果中,将其添加到groupby列表中是否可行?即使我并不真的想按此列分组? - user3439329

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接