Как найти один и тот же столбец в двух разных фреймах данных и вернуть индекс одного и того же столбца в каждом фрейме данных - PullRequest
0 голосов
/ 26 марта 2020

df1

  |a |b |c |d |e |f |g |    
0 |1 |2 |3 |4 |5 |6 |7 |  
1 |2 |2 |4 |2 |1 |5 |9 |  
2 |2 |6 |1 |7 |8 |4 |3 |  
3 |4 |4 |5 |1 |7 |8 |2 |  

df2

  |0 |1 |2 |3 |4 |5 |6 |    
0 |8 |1 |3 |5 |4 |6 |5 |  
1 |8 |2 |4 |1 |1 |2 |9 |  
2 |3 |2 |1 |8 |2 |4 |8 |  
3 |4 |4 |5 |7 |7 |8 |2 | 

где

df1['a'] = df2['1'] = [1,2,2,4]  
df1['c'] = df2['2'] = [3,4,1,5]  
df1['e'] = df2['3'] = [5,1,8,7]

Учитывая два приведенных выше кадра данных, как найти значение индекса для того же столбца в соответствующем кадре данных?
как return two список

['a', 'c', 'e']
['1', '2', '3']

1 Ответ

3 голосов
/ 26 марта 2020

Идея состоит в том, чтобы создать кортежи из столбцов, а затем сопоставить их по DataFrame.merge с внутренним объединением по умолчанию:

df11 = df1.apply(tuple).reset_index(name='a') 
df22 = df2.apply(tuple).reset_index(name='a')

df = df11.merge(df22, on='a')
print (df)
  index_x             a index_y
0       a  (1, 2, 2, 4)       1
1       c  (3, 4, 1, 5)       2
2       e  (5, 1, 8, 7)       3

Последнее преобразование столбцов в списки:

a = df['index_x'].tolist()
b = df['index_y'].tolist()
print (a)
['a', 'c', 'e']

print (b)
['1', '2', '3']
...