我有一个数据帧,看起来像这样:
+------------+---------------------+---------+
| action | ts | uid |
+------------+---------------------+---------+
| action1 | 2013-01-01 00:00:00 | 543534 |
| action2 | 2013-01-01 00:00:00 | 543544 |
| action1 | 2013-01-01 00:00:02 | 543542 |
| action2 | 2013-01-01 00:00:03 | 543541 |
| .... | .... | ... |
+------------+---------------------+---------+
我想计算每个用户在给定时间范围内执行的每种类型的actions
的数量,因此预期的输出是smth,如下所示:
uid action1 action2
543534 10 1
543534 0 2
...
我想先应用.groupby('uid')
,然后遍历分组对象,选择行,然后ts
在给定范围内,然后将数据帧连接到结果数据帧中,排序
所以,像这样:
df = ...
start_date = ...
end_date = ...
result = {}
grouped = df.groupby('uid')
grouped_dict = dict(list(grouped))
for item in grouped.keys:
df = grouped[item]
result[item] = df[df.ts > start_date and df.ts < end_date].size()
我没有运行过这个代码,但我认为即使它能工作,它的效率也非常低。甚至将分组对象转换为字典也需要很多时间。在这种情况下,什么方法更有效?你知道吗
您可以按
uid
和action
分组:输出:
查看
pandas.DataFrame
的接口,我会选择如下数据:现在,让我们只打印每个uid的操作数:
相关问题 更多 >
编程相关推荐