I'm currently using python and having trouble finding a code. I have 2 data frames that I would like to match more than 2 numbers that match side by side. For example, I would like to lookup the numbers in df1 and find more than 2 numbers match side by side in df2.
import pandas as pd
cols = ['Num1','Num2','Num3','Num4','Num5','Num6']
df1 = pd.DataFrame([[2,4,6,8,9,10]], columns=cols)
df2 = pd.DataFrame([[1,1,2,4,5,6,8],
[2,5,6,20,22,23,34],
[3,8,12,13,34,45,46],
[4,9,10,14,29,32,33],
[5,1,22,13,23,33,35],
[6,1,6,7,8,9,10],
[7,0,2,3,5,6,8]],
columns = ['Id','Num1','Num2','Num3','Num4','Num5','Num6'])
I would like my results to be something like this.
results = pd.DataFrame([[6,1,6,7,8,9,10]],
columns = ['Id', 'Num1','Num2','Num3','Num4','Num5','Num6'])
You can see Id 6 or index 6 has 8,9,10. More than 2 number match side by side.
CodePudding user response:
i Hope that help you .
# step1: extract values to compare from df1 and df2
list1=df2[['Num1','Num2','Num3','Num4','Num5','Num6']].values.tolist()
list2=df1[['Num1','Num2','Num3','Num4','Num5','Num6']].values.tolist()
#step 2: out the ligne that value in list1 equal value list2 and the same Number in tow data frame
k=[]
for i in range(6):
for j in range(len(list1)):
if df1.columns[i]==df2.columns[i 1] and list1[j][i]==list2[0][i]:
k.append(j)
#step3 count how many time values match more than 2 numbers that match side by side
count = {}
for i in k:
count[i] = k.count(i)
#step4: return result thats in condition match more than 2 numbers that match side by side
out=[]
for i in count:
if count[i]>2:
out.append(i)
result= df2.loc[out].reset_index()
result:
index Id Num1 Num2 Num3 Num4 Num5 Num6
0 5 6 1 6 7 8 9 10