[英]Finding common elements in panda dataframes
我已經制作了一個這樣的數據框
data = [['Football', 'x'], ['Football', 'y'], ['Football', 'z'], ['Volleyball', 'a' ], ['Volleyball', 'x'], ['Volleyball', 'y'], ['ruggby', 'd'], ['ruggby', 'e'], ['ruggby', 'f'] ]
df = pd.DataFrame(data, columns = ['Name', 'Country'])
我制作了不同的數據框如下
sports = [v for k, v in df.groupby('Name')]
然后我從以下代碼檢查共同國家
numbers=[]
for x in range(len(sports)):
for y in range(len(sports)):
try:
common_sports=sports[x]['Country'].isin(sports[y]['Country']).value_counts()
numbers.append(common_sports[True])
except:
numbers.append(float('inf'))
print(numbers)
有沒有一種更快的 Pandas 方法來編寫沒有 for 循環的最后一組代碼? 這樣我就會得到相同的結果。
結果將是
[3, 2, inf, 2, 3, inf, inf, inf, 3]
如果我理解正確,您想對“名稱”和“國家/地區”列之間的常見值求和:
import numpy as np
import pandas as pd
data = [['Football', 'x'], ['Football', 'y'], ['Football', 'z'], ['Volleyball', 'a' ], ['Volleyball', 'x'], ['Volleyball', 'y'], ['ruggby', 'd'], ['ruggby', 'e'], ['ruggby', 'f'] ]
df = pd.DataFrame(data, columns = ['Name', 'Country'])
df = df.assign(foo=1).merge(df.assign(foo=1), on='foo')
df = df.groupby(['Name_x', 'Name_y'])['Country_x', 'Country_y'].apply(lambda x: len( set(x.Country_x) & set(x.Country_y) )).reset_index()
print(df[0].replace(0, np.inf).values.tolist())
印刷:
[3.0, 2.0, inf, 2.0, 3.0, inf, inf, inf, 3.0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.