gpt4 book ai didi

python - 如何按一段时间对DataFrame进行分组?

转载 作者:IT老高 更新时间:2023-10-28 21:33:30 26 4
gpt4 key购买 nike

我有一些来自日志文件的数据,想按一分钟对条目进行分组:

 def gen(date, count=10):
while count > 0:
yield date, "event{}".format(randint(1,9)), "source{}".format(randint(1,3))
count -= 1
date += DateOffset(seconds=randint(40))

df = DataFrame.from_records(list(gen(datetime(2012,1,1,12, 30))), index='Time', columns=['Time', 'Event', 'Source'])

df:

 Event  Source
2012-01-01 12:30:00 event3 source1
2012-01-01 12:30:12 event2 source2
2012-01-01 12:30:12 event2 source2
2012-01-01 12:30:29 event6 source1
2012-01-01 12:30:38 event1 source1
2012-01-01 12:31:05 event4 source2
2012-01-01 12:31:38 event4 source1
2012-01-01 12:31:44 event5 source1
2012-01-01 12:31:48 event5 source2
2012-01-01 12:32:23 event6 source1

我尝试了以下选项:

  1. df.resample('Min') 级别太高,要聚合。
  2. df.groupby(date_range(datetime(2012,1,1,12, 30), freq='Min',
    period=4))
    异常失败。
  3. df.groupby(TimeGrouper(freq='Min')) 工作正常并返回一个 DataFrameGroupBy 对象以供进一步处理,例如:

    grouped = df.groupby(TimeGrouper(freq='Min'))
    grouped.Source.value_counts()
    2012-01-01 12:30:00 source1 1
    2012-01-01 12:31:00 source2 2
    source1 2
    2012-01-01 12:32:00 source2 2
    source1 2
    2012-01-01 12:33:00 source1 1

然而TimeGrouper 类没有记录。

按时间段分组的正确方法是什么?如何按一分钟和源列对数据进行分组,例如groupby([TimeGrouper(freq='Min'), df.Source])?

最佳答案

您可以对与 DataFrame 长度相同的任何数组/系列进行分组 --- 甚至是实际上不是 DataFrame 列的计算因子。所以按分钟分组,你可以这样做:

df.groupby(df.index.map(lambda t: t.minute))

如果您想按分钟或其他方式分组,只需将上述内容与您要使用的列混合:

df.groupby([df.index.map(lambda t: t.minute), 'Source'])

我个人发现,如果我想经常按它们分组,只需将列添加到 DataFrame 以存储其中一些计算的内容(例如,“分钟”列)很有用,因为它使分组代码不那么冗长。

或者你可以试试这样的:

df.groupby([df['Source'],pd.TimeGrouper(freq='Min')])

关于python - 如何按一段时间对DataFrame进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11073609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com