#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