Python计算一个列表和多个列表之间精确匹配的数量

2024-10-01 19:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我有一个excel文件(或csv文件),我将其转换为一个数据帧(df)。在

接下来,在第一列中有一个字符串的主列表,其中包含字母数字字符。在

然后,在随后的列中有字符串列表,这些字符串可以是相同长度(list1)、较短(list2)或更长(list3)。在

我想count(或sum)与其他列表之间精确匹配的数量。在


# Assign spreadsheet filename to `file`
file = "list_match.xlsx"

# Load spreadsheet
import pandas as pd
df = pd.read_excel(file)

print (df)
master_list list1   list2   list3
abc         abc     abc     stu
def         xxx     def     zzz
ghi         xxx     yyy     zzz
jkl         xxx     yyy     zzz
mno1        xxx     yz1     zzz
pqr         xxx             zzz
stu         xxx             zzz
vwx         xxx             zzz
yz1         xxx             zzz
yz2         xx1             zzz
yz3         xx1             zzz
                            zzz
                            mno1
                            zzz

目标是创造这样的结果:

^{pr2}$

结果说明:

  • 列表1中有一个匹配项:“abc”
  • 列表2中有三个匹配项:“abc”、“def”、“yz1”
  • 列表3中有两个匹配项:“stu”、“mno1”

我的问题与this question相似,只是数据被转置,并且有多个列表要比较,这可能需要循环。在


Tags: 文件数据字符串df列表defexcelfile
3条回答

使用numpy广播

s1=df.iloc[:,1:].values
s2=df['master_list'].values[:,None]
np.sum(s1==s2[:,None],1).sum(0)
Out[409]: array([1, 3, 2])

有:

   master_list list1 list2 list3
0          abc   abc   abc   stu
1          def   xxx   def   zzz
2          ghi   xxx   yyy   zzz
3          jkl   xxx   yyy   zzz
4         mno1   xxx   yz1   zzz
5          pqr   xxx   NaN   zzz
6          stu   xxx   NaN   zzz
7          vwx   xxx   NaN   zzz
8          yz1   xxx   NaN   zzz
9          yz2   xx1   NaN   zzz
10         yz3   xx1   NaN   zzz
11         NaN   NaN   NaN   zzz
12         NaN   NaN   NaN  mno1
13         NaN   NaN   NaN   zzz

使用df.applynp.isin

^{pr2}$

df.isin

df.isin(df.master_list.dropna().tolist()).sum()

结果:

master_list    11
list1           1
list2           3
list3           2
dtype: int64

创建主列表的非空值列表并使用数据帧.isin在

master_list = df.loc[df['master_list'].notnull(), 'master_list'].tolist()
df.iloc[:, 1:].isin(master_list).sum()



list1    1
list2    3
list3    2

相关问题 更多 >

    热门问题