我从以下pandas数据框开始,我希望每天分组,并创建一个名为“label”的新列,该列用序列号标记该组。我该怎么做?
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
答案 0 :(得分: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' ) )
如果您只想按日期分组:
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
进行更多讨论。
答案 1 :(得分:0)
这可能是一种更简单直观的方法:
df['label'] = df.groupby(df.index.day).keys