Сравнение и изменение столбцов из разных фреймов данных — Python / pandas

#python #pandas #dataframe #numpy #compare

#python #pandas #фрейм данных #numpy #Сравнить

Вопрос:

У меня есть два файла со столбцами разной длины, которые выглядят следующим образом:

 df2:  
  N_Machine       x       y       z
0     CB-32   90.42  910.29   62.68
1     CB-27  985.65  995.54  669.62
2     CB-18  852.92  952.51  525.60
3     CB-43  950.92  906.64  618.59

df:
    Name    Number
0   CB-15  12.55.47
1   CB-32  12.55.21
2   CB-91  12.55.75
3   CB-07  12.55.13
4   CB-22  12.55.14
5   CB-16  12.55.52
6   CB-43  12.55.49
7   CB-24  12.55.55
8   CB-17  12.55.31
9   CB-32  12.55.33
10  CB-38  12.55.19
11  CB-27  12.55.62
12  CB-51  12.55.23
13  CB-14  12.55.39
14  CB-31  12.55.65
15  CB-41  12.55.62
16  CB-20  12.55.70
17  CB-18  12.55.26
18  CB-10  12.55.44
 

Что я делал: пытался сравнить столбцы df[‘Name’] и df2[‘N_ Machine’]. Если они равны, df2[‘N_ Machine’] получит значение столбца df[‘Number’] из соответствующей строки.

Например, строка [0] df2[‘N_Machine ‘] совпадает с df[‘Number] в строке[1]. Затем df2[‘N_Machine ‘] должен получить значение ‘12.55.21’ из df[‘Number] . Таким образом, строка [0] df2 будет изменена на:

 df:  
  N_Machine       x       y       z
0     12.55.21   90.42  910.29   62.68
 

Мой код приведен ниже. Мой вопрос: после сравнения столбцов df2 [‘Machine’] получает первые значения df [‘Number’] вместо значений df [‘Number’] из соответствующих строк, как я могу это исправить?

 import pandas as pd
import pandas

df = pandas.read_excel('Part_Dat.xlsx', engine='openpyxl')

df2 = pd.read_csv("Data_Aver_Coord.csv")

if [df['Name'].isin(df2['N_Machine'])]:
    df2['N_Machine']=df['Number']`
 

Ответ №1:

Использование pandas.DataFrame.merge() :

 df3 = df1.merge(df2, left_on='N_Machine', right_on='Name', how='outer').drop(['N_Machine'], axis=1)
 

Вывод:

 >>> df3
         x       y       z   Name    Number
0    90.42  910.29   62.68  CB-32  12.55.21
1    90.42  910.29   62.68  CB-32  12.55.33
2   985.65  995.54  669.62  CB-27  12.55.62
3   852.92  952.51  525.60  CB-18  12.55.26
4   950.92  906.64  618.59  CB-43  12.55.49
5      NaN     NaN     NaN  CB-15  12.55.47
6      NaN     NaN     NaN  CB-91  12.55.75
7      NaN     NaN     NaN  CB-07  12.55.13
8      NaN     NaN     NaN  CB-22  12.55.14
9      NaN     NaN     NaN  CB-16  12.55.52
10     NaN     NaN     NaN  CB-24  12.55.55
11     NaN     NaN     NaN  CB-17  12.55.31
12     NaN     NaN     NaN  CB-38  12.55.19
13     NaN     NaN     NaN  CB-51  12.55.23
14     NaN     NaN     NaN  CB-14  12.55.39
15     NaN     NaN     NaN  CB-31  12.55.65
16     NaN     NaN     NaN  CB-41  12.55.62
17     NaN     NaN     NaN  CB-20  12.55.70
18     NaN     NaN     NaN  CB-10  12.55.44