2017-08-25 58 views
-1

我有数据帧熊猫:利用马尔可夫链集群数据

member_id domain 
111  vk.com 
111  facebook.com 
111  stackoverflow.com 
222  facebook.com 
222  twitter.com 
333  wikipedia.org 
333  vk.com 
333  facebook.com 

我需要集群ID,我需要从域路径马尔可夫链,但我有一些困难。

111: vk.com -> facebook.com -> stackoverflow.com 
222: facebook.com -> twitter.com 
333: wikipedia.org -> vk.com -> facebook.com 

我应该建立邻接矩阵的每一个ID?如果我这样做是聚类的方法吗?或者有另一种方式? 或者我应该得到所有的路径,并与它比较每个ID?

回答

1

假设你会想以后跟你的马尔可夫链的东西汇总它,你可能想要表示它作为一个Python列表,例如...

outer_list = [] 
for ID, sites in old_df.groupby("ID"): 
    inner_list = sites["domain"].values.tolist() 
    outer_list.append(inner_list) 

IDs = old_df.ID.unique() 
new_df = pd.DataFrame() 
new_df["member_id"] = pd.Series(IDs).values 
new_df["chain"] = pd.Series(outer_list).values 

你就会有一个数据帧,看起来像这样...

member_id chain 
0 1 [vk, fb, so] 
1 2 [fb, tw] 
2 3 [wik, vk, fb] 

免责声明:不是最快的,最Python的代码等等等等...

3
df.groupby('member_id')['domain'].agg(' -> '.join) 

输出:

member_id 
111 vk.com -> facebook.com -> stackoverflow.com 
222     facebook.com -> twitter.com 
333  wikipedia.org -> vk.com -> facebook.com 
Name: domain, dtype: object 

或列表:

df.groupby('member_id')['domain'].agg(lambda x: x.tolist()) 

输出:

member_id 
111 [vk.com, facebook.com, stackoverflow.com] 
222     [facebook.com, twitter.com] 
333  [wikipedia.org, vk.com, facebook.com] 
dtype: object