簡體   English   中英

在數據框中找到最頻繁的對

[英]find most frequent pairs in a dataframe

假設我有一個兩列的數據幀,其中第一列是會議的ID,第二列是該會議中一個參與者的ID。 像這樣:

meeting_id,person_id
meeting0,person1234
meeting0,person4321
meeting0,person5555
meeting1,person4321
meeting1,person9999
# ... ~1 million rows

我想找到每個人的前15名共同參與者。 例如:我想知道哪個15個人最常參加與布拉德的會議。

作為中間步驟,我編寫了一個腳本,該腳本采用原始數據框並制作了一個人對人的數據框,如下所示:

person1234,person4321
person1234,person5555
person4321,person5555
person4321,person9999
...

但是我不確定這個中間步驟是否必要。 另外,它要花很多時間才能運行(據我估計,這需要數周的時間!)。 這是怪獸:

import pandas as pd

links = []
lic = pd.read_csv('meetings.csv', sep = ';', names = ['meeting_id', 'person_id'], dtype = {'meeting_id': str, 'person_id': str})
grouped = lic.groupby('person_id')
for i, group in enumerate(grouped):
    print(i, 'of', len(grouped))
    person_id = group[0].strip()
    if len(person_id) == 14:
        meetings = set(group[1]['meeting_id'])
        for meeting in meetings:
            lic_sub = lic[lic['meeting_id'] == meeting]
            people = set(lic_sub['person_id'])
            for person in people:
                if person != person_id:
                    tup = (person_id, person)
                    links.append(tup)

df = pd.DataFrame(links)
df.to_csv('links.csv', index = False)

有任何想法嗎?

所以這是使用合並然后對列進行排序的一種方法

s=df.merge(df,on='meeting_id')
s[['person_id_x','person_id_y']]=np.sort(s[['person_id_x','person_id_y']].values,1)
s=s.query('person_id_x!=person_id_y').drop_duplicates()

s
   meeting_id person_id_x person_id_y
1    meeting0  person1234  person4321
2    meeting0  person1234  person5555
5    meeting0  person4321  person5555
10   meeting1  person4321  person9999

暫無
暫無

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

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