加入两个大型 CSV 而无需在 Python Pandas(或类似)中重复,就像在第一个数据帧上使用 VLOOKUP
Join two large CSV's without duplicating in Python Pandas (or similar), much like using VLOOKUP on just the first dataframe
我有一个 3425 行长的数据集(数据集 1),它有大约 600 个 "Part Numbers" 是唯一的。数据集 2 列出了所有这些部件编号,以及更多(因为数据集 1 中不存在一些),以及一些相应的 运行 时间数据。这些就不重复了。
无论我选择什么方法,我都无法让它以某种方式不重复。我想让它做的就是查看数据集 1 中的第 1 行,找到数据集 2 中的 3 列数据,并将其作为另外 3 列添加到右侧。
例如(这是一个非常基本的想法)
数据集 1:
Part Number Quantity Person
aaa 1 JK
bbb 2 PM
ccc 1 BJ
ddd 3 LL
aaa 999 ZZ
数据集 2:
Part Number Typical Material Cats/Dogs
aaa Nylon Cat
bbb Cheese Dog
ccc Titanium Cat
ddd Cardboard Dog
eee Mouse Cat
结果:
Part Number Quantity Person Typical Material Cats/Dogs
aaa 1 JK Nylon Cat
bbb 2 PM Cheese Dog
ccc 1 BJ Titanium Cat
ddd 3 LL Cardboard Dog
aaa 999 ZZ Nylon Cat
因此它可以完全忽略 eee,因为它在数据集 1 中不是必需的,并附加我所拥有的数据。
我已经尝试了很多方法来让它工作,还有更多因为它们已被删除而没有在下面。 merge 和 concat 的所有变体,以及 update() 和我忘记的其他一些。我尝试了一些循环,并搜索了堆栈溢出,google 等。都有类似的想法,但实际上没有任何效果。
pulsesCSV = pd.read_csv("C:\location")
#pulsesCSV.set_index('Part Number') - Used for
rawDataCSV = pd.read_csv("C:\location")
#rawDataCSV.set_index('Part Number')
#df = rawDataCSV.merge(pulsesCSV, on='Part Number')
#df = pd.DataFrame(df[df.index_x==df.index_y]['Part Number'], columns=['Part Number']).reset_index(drop=True)
# Join the tables on the part number
#jointTable = pd.merge(pulsesCSV,rawDataCSV,on='Part Number')
#jointTable = pd.merge(rawDataCSV,pulsesCSV,on='Part Number',how='outer')
#jointTable = pd.concat([pulsesCSV,rawDataCSV],axis=1,join='inner')
#jointTable = rawDataCSV.combine_first(pulsesCSV)
#jointTable = pulsesCSV.combine_first(rawDataCSV)
#jointTable = rawDataCSV.join(pulsesCSV,on='Part Number',how='inner')
#export_csv = jointTable.to_csv(r"")
假设您的数据帧名为 df 和 df1
res = pd.merge(df,df1,on='Part',how='left)
进行左连接只会保留左框架中的键。
我有一个 3425 行长的数据集(数据集 1),它有大约 600 个 "Part Numbers" 是唯一的。数据集 2 列出了所有这些部件编号,以及更多(因为数据集 1 中不存在一些),以及一些相应的 运行 时间数据。这些就不重复了。
无论我选择什么方法,我都无法让它以某种方式不重复。我想让它做的就是查看数据集 1 中的第 1 行,找到数据集 2 中的 3 列数据,并将其作为另外 3 列添加到右侧。
例如(这是一个非常基本的想法)
数据集 1:
Part Number Quantity Person
aaa 1 JK
bbb 2 PM
ccc 1 BJ
ddd 3 LL
aaa 999 ZZ
数据集 2:
Part Number Typical Material Cats/Dogs
aaa Nylon Cat
bbb Cheese Dog
ccc Titanium Cat
ddd Cardboard Dog
eee Mouse Cat
结果:
Part Number Quantity Person Typical Material Cats/Dogs
aaa 1 JK Nylon Cat
bbb 2 PM Cheese Dog
ccc 1 BJ Titanium Cat
ddd 3 LL Cardboard Dog
aaa 999 ZZ Nylon Cat
因此它可以完全忽略 eee,因为它在数据集 1 中不是必需的,并附加我所拥有的数据。
我已经尝试了很多方法来让它工作,还有更多因为它们已被删除而没有在下面。 merge 和 concat 的所有变体,以及 update() 和我忘记的其他一些。我尝试了一些循环,并搜索了堆栈溢出,google 等。都有类似的想法,但实际上没有任何效果。
pulsesCSV = pd.read_csv("C:\location")
#pulsesCSV.set_index('Part Number') - Used for
rawDataCSV = pd.read_csv("C:\location")
#rawDataCSV.set_index('Part Number')
#df = rawDataCSV.merge(pulsesCSV, on='Part Number')
#df = pd.DataFrame(df[df.index_x==df.index_y]['Part Number'], columns=['Part Number']).reset_index(drop=True)
# Join the tables on the part number
#jointTable = pd.merge(pulsesCSV,rawDataCSV,on='Part Number')
#jointTable = pd.merge(rawDataCSV,pulsesCSV,on='Part Number',how='outer')
#jointTable = pd.concat([pulsesCSV,rawDataCSV],axis=1,join='inner')
#jointTable = rawDataCSV.combine_first(pulsesCSV)
#jointTable = pulsesCSV.combine_first(rawDataCSV)
#jointTable = rawDataCSV.join(pulsesCSV,on='Part Number',how='inner')
#export_csv = jointTable.to_csv(r"")
假设您的数据帧名为 df 和 df1
res = pd.merge(df,df1,on='Part',how='left)
进行左连接只会保留左框架中的键。