繁体   English   中英

在熊猫数据框中查找公共元素

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM