我在 pandas 数据框中有一个使用日志:
event_time session_id object
10:00:03 1 A
10:00:03 1 B
10:00:03 1 C
10:00:03 1 E
10:00:03 2 J
10:00:03 2 O
10:00:03 2 A
10:00:03 2 A
我已按 session_id 对对象进行分组。我现在想针对任何给定对象对的每个单元格针对对象构建一个对象共现矩阵,其中包含这些对象在一组中共同出现的次数(即针对相同的 session_id): 大致如下:
A B C ...
A 20 1 12
B 1 100 9
C 12 9 30
...
有没有办法让上面的内容以字典的形式出现,这样所有非零的出现都不代表任何给定的对象“键”?
显然矩阵是三角形的。有没有办法将矩阵转换为以下形式的熔化数据表:
Object 1 Object 2 # of co-occurences
A A 20
A B 1
... ... ...
在此先感谢您的帮助。
更新:我在 12MB 的数据上运行用于原型(prototype)制作的算法,但将在 c 上的 AMAZON 上“真实地”运行。来自多 TB 数据集的 2-3 GB 数据。我不认为 GB 是 pig 的领地——建议的答案越有效越好
我希望能够在字典中查找对象,然后查看与它们同时出现的所有对象和计数(将来可能最终会在 Solr 中对该结构进行索引)
请您参考如下方法:
您的意见
In [80]: df
Out[80]:
event_time session_id object
0 10:00:03 1 A
1 10:00:03 1 B
2 10:00:03 1 C
3 10:00:03 1 E
4 10:00:03 2 J
5 10:00:03 2 O
6 10:00:03 2 A
7 10:00:03 2 A
[8 rows x 3 columns]
这是 session_id 计数矩阵。让你大部分的方式那里。 (当然你可以填then nas如果你愿意的话)
In [81]: df.groupby('session_id').apply(lambda x: x['object'].value_counts()).unstack()
Out[81]:
A B C E J O
session_id
1 1 1 1 1 NaN NaN
2 2 NaN NaN NaN 1 1
[2 rows x 6 columns]
