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

Sid*_*hou 2 python 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
Run Code Online (Sandbox Code Playgroud)

输出:

                     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
Run Code Online (Sandbox Code Playgroud)

期望的输出:

                    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
Run Code Online (Sandbox Code Playgroud)

小智 5

试试这个:

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

如果您只想按日期分组:

df['label'] = df.groupby(df.index.date).grouper.group_info[0] + 1
print(df)
Run Code Online (Sandbox Code Playgroud)

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

df['label'] = df.groupby(pd.TimeGrouper('D')).grouper.group_info[0] + 1
print(df)
Run Code Online (Sandbox Code Playgroud)

以上两者都应该给你以下内容:

                      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
Run Code Online (Sandbox Code Playgroud)

我认为这是无证的(至少很难找到).查看:

将组ID重新导入pandas数据帧

进一步讨论.