兩字組我有這個測試表中數據幀的大熊貓創建一個列在大熊貓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