【问题标题】:Grouping dataframe by custom date按自定义日期分组数据框
【发布时间】:2015-10-07 00:47:34
【问题描述】:

我有一个大型数据框,我试图在一个实例中按分钟组合日期,另一个按 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'])

方法一

我使用了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 解析

方法二

我尝试将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..

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    要按频率对列进行分组,您需要将其名称传递给Grouperkey 参数,如下所示:

    df.groupby(pd.Grouper(key='TIMESTAMP', freq='30T'))
    

    编辑:

    请参阅Grouper 文档了解更多信息 - 但一般来说,当您使用groupby([a,b]) 时,您是按ab唯一组合 进行分组的。

    因此,在您的示例中,您按所有唯一时间戳值分组 (df['TIMESTAMP']) 和索引的时间分组(pd.TimeGrouper 默认为索引,如果没有指定键) - TypeError 是因为您的索引不是 datetimelike。

    这也是为什么在将索引设置为'TIMESTAMP' 后获得大量组的原因。

    【讨论】:

    • 是的,这行得通。我试过df2.groupby([df2['TIMESTAMP'],pd.TimeGrouper(freq='H')]),它给了我TypeError,在做df2['TIMESTAMP'] = pd.to_datetime(df2['TIMESTAMP']之后。知道为什么吗?
    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    相关资源
    最近更新 更多