任务非常简单,我可以部分完成它:
from dateutil.parser import parse
for timestamp, grp in itertools.groupby(transactions, lambda x: parse(x['date']).hour):
group = list(grp)
logger.info(f'{timestamp} : {len(group)}')
->我得到了hour:count
数组。
但是我想要一个datetime:count
数组作为结果(其中datetime
对象代表一个小时)。
我是否必须在datetime
函数中构建lambda x
对象? (即获取x['date']).hour
,x['date']).day
,x['date']).month
等,并使用这些值创建新的datetime
)还是有另一种方法?
样本输入(交易)包含数周/数月的数据:
[
{
'date': '2018-12-04T15:34:40+00:00',
'data': 'blabla'
},
{
'date': '2018-12-04T15:38:40+00:00',
'data': 'blabla'
},
{
'date': '2018-12-04T15:45:40+00:00',
'data': 'blabla'
},
]
示例输出:
2018-12-04 13:00:00+00:00 : 6
2018-12-04 14:00:00+00:00 : 1
2018-12-04 15:00:00+00:00 : 2
谢谢
答案 0 :(得分:1)
您需要使用datetime对象作为键,我现在使用它作为日期,但是您可以使用原始日期:
"\n"
输出
startActivityForResult()
答案 1 :(得分:0)
由于我是MergeThis
的粉丝,所以:
In [42]: right
Out[42]:
C D MergeThis
0 1 2 +N2
1 3 4 +N2
2 5 6 +N2
3 7 8 +N2
In [43]: left
Out[43]:
A B MergeThis
0 1 2 -N2
1 3 4 -N2
2 5 6 +N2
3 7 8 +N2
4 9 10 +N2
5 11 12 +N2
In [44]: right.index = left[left.MergeThis == '+N2'].index.values
In [45]: right
Out[45]:
C D MergeThis
2 1 2 +N2
3 3 4 +N2
4 5 6 +N2
5 7 8 +N2
In [46]: pandas.concat([left, right], axis=1)
Out[46]:
A B MergeThis C D MergeThis
0 1 2 -N2 NaN NaN NaN
1 3 4 -N2 NaN NaN NaN
2 5 6 +N2 1.0 2.0 +N2
3 7 8 +N2 3.0 4.0 +N2
4 9 10 +N2 5.0 6.0 +N2
5 11 12 +N2 7.0 8.0 +N2
这是使用列表理解的解决方案:
collections.Counter