python - 如何为 pandas groupby 分配顺序标签?

标签 python pandas

我从以下 pandas 数据框开始,我希望每天分组,并创建一个名为“标签”的新列,用序号标记组。我该怎么做?

df = pd.DataFrame({'val': [10,40,30,10,11,13]}, index=pd.date_range('2016-01-01 00:00:00', periods=6, freq='12H' ) )
# df['label'] = df.groupby(pd.TimeGrouper('D')) # what do i do here???
print df

输出:

                     val
2016-01-01 00:00:00   10
2016-01-01 12:00:00   40
2016-01-02 00:00:00   30
2016-01-02 12:00:00   10
2016-01-03 00:00:00   11
2016-01-03 12:00:00   13

期望的输出:

                    val label
2016-01-01 00:00:00   10  1
2016-01-01 12:00:00   40  1
2016-01-02 00:00:00   30  2
2016-01-02 12:00:00   10  2
2016-01-03 00:00:00   11  3
2016-01-03 12:00:00   13  3

最佳答案

试试这个:

df = pd.DataFrame({'val': [10,40,30,10,11,13]}, index=pd.date_range('2016-01-01 00:00:00', periods=6, freq='12H' ) )

如果您只想按日期分组:

df['label'] = df.groupby(df.index.date).grouper.group_info[0] + 1
print(df)

要更普遍地按时间分组,您可以使用 TimeGrouper:

df['label'] = df.groupby(pd.TimeGrouper('D')).grouper.group_info[0] + 1
print(df)

以上两者都应该为您提供以下内容:

                      val  label
2016-01-01 00:00:00   10      1
2016-01-01 12:00:00   40      1
2016-01-02 00:00:00   30      2
2016-01-02 12:00:00   10      2
2016-01-03 00:00:00   11      3
2016-01-03 12:00:00   13      3

我认为这没有记录(或至少很难找到)。查看:

Get group id back into pandas dataframe

更多讨论。

关于python - 如何为 pandas groupby 分配顺序标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38861600/

相关文章:

python - Pandas :将一列与数据框的所有其他列进行比较

Dotcloud 上的 Python 在某些功能上崩溃

python - Pandas 连接/连接操作合一以连接数据帧

python Pandas : Check if string in one column is contained in string of another column in the same row

python - 从 Google Contacts API 3.0 版获取所有联系人

python - 如何修复计数查询 mysql 中的输出(flask)

python - 访问对象的对象属性数组会在 python 中给出属性错误

python - Pandas DataFrame Groupby 获取唯一行条件并识别增加值直至组数

python - Pandas:具有多种功能的分组和聚合

python - 如何使用 python 中的循环重置多个 pandas 数据帧的索引?