[英]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.