【问题标题】:Convert Series index to df columns after groupby in Pandas在 Pandas 中 groupby 之后将 Series 索引转换为 df 列
【发布时间】:2020-05-18 00:40:15
【问题描述】:

以下代码

testIDs.groupby(
    ['id', pd.TimeGrouper(key='date',freq='20s')]
)['quadrant'].value_counts()

给我:

Out[128]: 
id    date                 quadrant
2617  2019-10-08 18:47:40  4           1
      2019-10-08 18:54:00  1           1
                           3           1
      2019-10-08 18:54:40  0           1
                           3           1  
      2019-10-08 18:56:20  3           1
      2019-10-08 18:59:20  2           1
      2019-10-08 19:05:40  1           1
      2019-10-08 19:06:20  1           2
                           4           1
      2019-10-08 19:06:40  0           1
                           1           1
      2019-10-08 19:07:00  2           2
                           0           1
                           3           1
      2019-10-08 19:13:40  2           1
      2019-10-08 19:14:20  0           1
                           2           1
      2019-10-08 19:16:40  3           1
      2019-10-08 19:18:40  1           3
                           0           2
                           3           2
                           2           1
      2019-10-08 19:19:00  4           3
                           1           2
                           0           1
                           2           1
      2019-10-08 19:19:20  4           6
                           2           1
      2019-10-08 19:19:40  3           2
                                      ..
2855  2019-10-08 19:44:20  4           4
                           1           2
                           2           2
      2019-10-08 19:44:40  4           8
      2019-10-08 19:45:00  4           3
                           1           2
                           2           2
                           0           1
      2019-10-08 19:45:20  4           7
                           2           1
      2019-10-08 19:45:40  4           4
                           2           2
                           1           1
                           3           1
      2019-10-08 19:46:00  1           3
                           4           2
                           0           1
                           2           1
                           3           1
      2019-10-08 19:46:20  2           4
                           1           3
                           4           1
      2019-10-08 19:46:40  1           3
                           2           3
                           3           1
                           4           1
      2019-10-08 19:47:00  0           2
                           1           1
                           2           1
                           4           1
   Name: quadrant, Length: 714, dtype: int64

最终输出应该是一个热图,其中日期为 X 轴,id 为 Y 轴,象限计数为值。我想根据象限和象限的计数及时比较id。

为此,我如何将此系列转换为数据框,并将多索引作为 df 列?

非常感谢您的帮助!!

【问题讨论】:

  • 在您的groupby 代码后添加.reset_index()
  • 但这仅返回列,而不是索引中的 id、日期和象限。我怎样才能将它们放入 df 列?
  • 重置索引需要一个聚合函数。我用整个代码添加了一个答案。如果您可以与您的数据共享一个示例、可重现的代码,那将是有益的。

标签: python pandas seaborn heatmap multi-index


【解决方案1】:

您似乎只需要重置索引,并使用聚合来完全返回数据帧:

testIDs.groupby(
    ['id', pd.TimeGrouper(key='date',freq='20s')]
).agg({'quadrant':'count'}).reset_index()

编辑:如果你的象限也被分组:

testIDs.groupby(
    ['id', pd.TimeGrouper(key='date',freq='20s'), 'quadrant']
).count().reset_index()

请注意,如果您有很多列,它将计入所有列。

【讨论】:

  • 这太棒了!最后,但它失去了原来的象限列?逻辑正是我的目标!
  • 哦,看来象限应该是您的groupby 的一部分,是这样吗?您是否在计算每个 id 的每个日期期间的每个象限?
  • 你太棒了,非常感谢!这正是我尝试的,创建一个新列,其中包含每个 id 的每个日期期间每个象限的计数。这可以在同一行代码中实现吗?
  • 是的,这应该是答案的第二部分。
猜你喜欢
  • 2016-09-26
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2016-05-03
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多