[英]List of list comparison with Dataframe columns (more than one column)
我有一個列表,如:
l=[['A,B,C,D', 'Z', 'category1'],
['A,B,C', 'Z', 'category2'],
['E,F,G,H', 'T', 'category4'],
['A,E,H', 'T', 'category4']]
和一個 DataFrame 像:
Col1 Col2 Col3
A Z category1
A,B,C,D Z category1
E,F,G,H,I T category4
A,E,H T category4
A,E,H T category5
A,E,H U category4
所以我想將列表列表與數據框列進行比較(考慮所有 3 列)。 與循環的比較工作效率不高,有沒有辦法進行比較並僅從數據框中返回匹配的行?
Desired Output DataFrame:
Col1 Col2 Col3
A,B,C,D Z category1
A,E,H T category4
謝謝!!
如果您尋找所有 3 列的完全匹配,為什么不嘗試將三列連接到第四列:
df['col4']=df['col1']+df['col2']+df['col3']
返回:
col1 col2 col3 col4
0 A Z category1 AZcategory1
1 A,B,C,D Z category1 A,B,C,DZcategory1
2 E,F,G,H,I T category4 E,F,G,H,ITcategory4
3 A,E,H T category4 A,E,HTcategory4
4 A,E,H T category5 A,E,HTcategory5
5 A,E,H U category4 A,E,HUcategory4
您可以將 'col4' 與列表list_join
的連接字符串進行list_join
。
list_join=[''.join(item) for item in l]
看起來像:
['A,B,C,DZcategory1', 'A,B,CZcategory2', 'E,F,G,HTcategory4', 'A,E,HTcategory4']
然后根據共同值進行合並:
common =df[df['col4'].isin(list_join)]
優點是您只需在單個列中搜索而不是在所有三列中進行搜索,這極大地簡化了您的功能。 缺點是靈活性較低。
創建DataFrame
從列表中,然后使用DataFrame.merge
默認內部聯接,如果沒有參數on
它通過合並兩列的所有DataFrame
S:
l=[['A,B,C,D', 'Z', 'category1'],
['A,B,C', 'Z', 'category2'],
['E,F,G,H', 'T', 'category4'],
['A,E,H', 'T', 'category4']]
df = pd.DataFrame(l, columns=['Col1','Col2','Col3']).merge(df)
print (df)
Col1 Col2 Col3
0 A,B,C,D Z category1
1 A,E,H T category4
一種方法是使用pandas.Series.duplicated方法:
#df = <your DataFrame defined here>
l=[['A,B,C,D', 'Z', 'category1'],
['A,B,C', 'Z', 'category2'],
['E,F,G,H', 'T', 'category4'],
['A,E,H', 'T', 'category4']]
listdf=pd.DataFrame(data = l, columns=df.columns) #transform list to dataframe
df=df.append(listdf) #append your list to the main dataframe
duplicates=df.duplicated() # find duplicate rows; returns series of booleans
print(df[duplicates]) # print duplicate rows
輸出:
# Col1 Col2 Col3
#0 A,B,C,D Z category1
#3 A,E,H T category4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.