我有两个文件,其中的列具有不同的长度,如下所示:
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']的值。
例如,df2['N_Machine']的行[0]与行[1]中的df['Number]匹配。那么df2['N_Machine']应该从df['Number]接收值'12.55.21'。因此df2的行[0]将更改为:
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']`
使用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