两字组我有这个测试表中数据帧的大熊猫创建一个列在大熊猫DF
Leaf_category_id session_id product_id
0 111 1 987
3 111 4 987
4 111 1 741
1 222 2 654
2 333 3 321
这是我刚才的问题,这是由@jazrael回答的延伸。 view answer
因此让中的product_id列中的值(只是一个假设,从我刚才的问题的输出略有不同,
|product_id |
---------------------------
|111,987,741,34,12 |
|987,1232 |
|654,12,324,465,342,324 |
|321,741,987 |
|324,654,862,467,243,754 |
|6453,123,987,741,34,12 |
等, 我想创建一个新列后,在其中行中的所有的值应该被制造为具有它的下一个,最后一个没有两字组的行与第一个组合中,例如:
|product_id |Bigram
-------------------------------------------------------------------------
|111,987,741,34,12 |(111,987),**(987,741)**,(741,34),(34,12),(12,111)
|987,1232 |(987,1232),(1232,987)
|654,12,324,465,342,32 |(654,12),(12,324),(324,465),(465,342),(342,32),(32,654)
|321,741,987 |(321,741),**(741,987)**,(987,321)
|324,654,862 |(324,654),(654,862),(862,324)
|123,987,741,34,12 |(123,987),(987,741),(34,12),(12,123)
忽略**(I”稍后会告诉你为什么我出演的是)
代码才达到两字组是
for i in df.Leaf_category_id.unique():
print (df[df.Leaf_category_id == i].groupby('session_id')['product_id'].apply(lambda x: list(zip(x, x[1:]))).reset_index())
从这个东风,我要考虑二元柱,使一个更加列命名为频率,这给了我两字的频率发生。
Note* : (987,741) and (741,987) are to be considered as same and one dublicate entry should be removed and thus frequency of (987,741) should be 2. similar is the case with (34,12) it occurs two times, so frequency should be 2
|Bigram
---------------
|(111,987),
|**(987,741)**
|(741,34)
|(34,12)
|(12,111)
|**(741,987)**
|(987,321)
|(34,12)
|(12,123)
最终的结果应该是。
|Bigram | frequency |
--------------------------
|(111,987) | 1
|(987,741) | 2
|(741,34) | 1
|(34,12) | 2
|(12,111) | 1
|(987,321) | 1
|(12,123) | 1
我希望能在这里找到答案,请帮助我,我尽可能详细阐述了它。
你怎么想的频率?在单行中,Bigram列将包含多个元组,因此会有多个频率。 – James
@James:行中的每个元组都应该被创建为一个新行,如第二个最后一个表所示。然后如果有重复的表格,正如我所提到的那样,频率应该相应地改变 – Shubham
所以'Bigram'和'frequency'是在一个单独的数据框中? – James