簡體   English   中英

從列表中生成 2×2 元組並在 python 中查找重復的元組

[英]Generating 2-by-2 tuples from list and finding the duplicated tuples in python

我是 Python 的初學者,在我的 dataFrame 上的元組上生成和識別重復項時遇到問題。

首先我有這個用戶ID列表:

'userid': ["us1", "us2", "us1", "us2", "us4", "us4", "us5", "us1", "us2"]

我想按照用戶 ID 在列表中的順序生成 2×2 元組,所以它是:

[('us1', 'us2'),
 ('us2', 'us1'),
 ('us1', 'us2'),
 ('us2', 'us4'),
 ('us4', 'us4'),
 ('us4', 'us5'),
 ('us5', 'us1'),
 ('us1', 'us2')]

但是我到達的元組是這個(我不明白為什么):

 [('us1', 'us2'),
 ('us2', 'us1'),
 ('us1', 'us4'),
 ('us4', 'us2'),
 ('us2', 'us5'),
 ('us5', 'us4'),
 ('us4', 'us1'),
 ('us1', 'us2')]

這是我的代碼:

   d = {'id': ["a", "a", "a", "a", "a", "a", "a", "a", "a"], 'id2': ["b", "b", "b", "b", "b", "b", "b", "b", "b"], 'userid': ["us1", "us2", "us1", "us2", "us4", "us4", "us5", "us1", "us2"], "time": [1, 2, 3, 5, 4, 7, 6, 8, 9]}
    df_test = pd.DataFrame(data=d).sort_values('time')
    df_test.groupby(['id','id2']).agg(lambda x: x.tolist()).reset_index()
    test2 = list(zip(df_test.userid[:-1], df_test.userid[1:]))
    zipped_list = test2[:]
    list(test2)

-> 此外,我的下一步將是在此元組上查找重復項並將它們提取為一個新列表,因此對於元組:

    [('us1', 'us2'),
     ('us2', 'us1'),
     ('us1', 'us2'),
     ('us2', 'us4'),
     ('us4', 'us4'),
     ('us4', 'us5'),
     ('us5', 'us1'),
     ('us1', 'us2')]

應該是列表[('us1', 'us2'), 3]因為它是唯一出現重復的元組,而 '3' 就是說出現了 3 次重復。

因此,我找不到按我想要的順序生成元組的錯誤,也不知道如何找到重復項。

讓我們做frozenset + value_counts

pd.Series(list(map(frozenset,zipped_list))).value_counts()
(us2, us1)    3
(us1, us4)    2
(us2, us5)    1
(us5, us4)    1
(us2, us4)    1
dtype: int64

如果只需要列表重新排序

l=list(map(frozenset,zipped_list))

或者我們可以做numpy

np.sort(zipped_list,axis=1).tolist()
[['us1', 'us2'], ['us1', 'us2'], ['us1', 'us4'], ['us2', 'us4'], ['us2', 'us5'], ['us4', 'us5'], ['us1', 'us4'], ['us1', 'us2']]

更新:你先sort_values ,所以我們需要sort_index

list(zip(df_test.userid[:-1].sort_index(), df_test.userid[1:].sort_index()))
[('us1', 'us2'), ('us2', 'us1'), ('us1', 'us2'), ('us2', 'us4'), ('us4', 'us4'), ('us4', 'us5'), ('us5', 'us1'), ('us1', 'us2')]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM