我有一些来自日志文件的数据,希望按分钟对条目进行分组:
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'])
数据框:
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
我试过这些选择:
df.resample('Min')
太高,需要聚合。df.groupby(date_range(datetime(2012,1,1,12, 30), freq='Min',
periods=4))
异常失败。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])
?
您可以在与数据帧长度相同的任何数组/序列上进行分组,即使计算的因子实际上不是数据帧的列。所以要按分钟分组,您可以:
如果要按分钟或其他方式分组,请将上面的内容与要使用的列混合使用:
就我个人而言,如果我想经常按列分组,只需向数据框中添加列来存储其中一些计算的内容(例如,“分钟”列)是很有用的,因为这样可以减少分组代码的冗长。
或者你可以试试这样的方法:
因为原来的答案已经很老了,熊猫也被引入了periods 现在有一种不同的解决方案:
另外,您可以resample
相关问题 更多 >
编程相关推荐