按自定义日期

时间:2015-10-07 00:47:35

标签: python pandas

我有一个大型数据框,我试图在一个实例中按分钟组合日期,另一个在30分钟内组合日期。

df = pd.read_csv('2015-09-01.csv', header=None,\
                    names=['ID','CITY', 'STATE', 'TIMESTAMP','TWEET'], \
                    low_memory=False, \
                    parse_dates=['TIMESTAMP'], usecols=['STATE','TIMESTAMP','TWEET'])

方法1

我使用了this解决方案但是如果我尝试以下内容:

df = df2.groupby([df2.TIMESTAMP,pd.TimeGrouper(freq='H')])

导致此错误:

TypeError: axis must be a DatetimeIndex, but got an instance of 'Int64Index

这非常奇怪,因为TIMESTAMP

中正在解析read_csv

方法2

我尝试将TIMESTAMP设置为索引然后执行:

df = df2.groupby([df2.index,pd.TimeGrouper(freq='H')])

但由于len(df)为1350而不是24,所以它不会出现正确,因为数据帧整体上是1天的数据。

方法3

我使用this解决方案,但我不确定如何将其设置为30分钟的时间间隔:

df = df2.groupby(df2['TIMESTAMP'].map(lambda x: x.hour))

示例数据

STATE,TIMESTAMP,TWEET
0,TX,2015-09-25 00:00:01,Wish I could have gone to the game
1,USA,2015-09-25 00:00:01,PSA:  @HaileyCassidyy and I are not related in...
2,USA,2015-09-25 00:00:02,If you gonna fail don't bring some one down wi...
3,NJ,2015-09-25 00:00:02,@_falastinia hol up hol up I can't listen to t...
4,USA,2015-09-25 00:00:02,"Wind 0.0 mph ---. Barometer 30.235 in, Rising ..."
5,NJ,2015-09-25 00:00:03,WHY ISNT GREYS ANATOMY ON?!
6,MI,2015-09-25 00:00:03,@cody_cole06 you bet it is
7,WA,2015-09-25 00:00:04,"Could be worse, I guess, could be in a collisi..."
8,NY,2015-09-25 00:00:04,I'm totally using this graphic some day... tha...
9,USA,2015-09-25 00:00:04,@MKnightOwl @Andromehda LMAO I honestly didn't..

1 个答案:

答案 0 :(得分:3)

要按频率对列进行分组,您需要将其名称传递给key的{​​{1}}参数,如下所示:

Grouper

编辑:

有关详情,请参阅Grouper文档 - 但一般情况下,当您执行df.groupby(pd.Grouper(key='TIMESTAMP', freq='30T')) 时,您会按groupby([a,b])和{{1}的唯一组合进行分组}}。

因此,在您的示例中,您按所有唯一时间戳值(a)进行分组 并且索引的时间分组器(如果没有指定键,则b默认为索引) - df['TIMESTAMP']是因为您的索引不是datetimelike。

这也是您在将索引设置为pd.TimeGrouper后获得大量群组的原因。