【发布时间】:2020-12-15 23:53:02
【问题描述】:
我需要比较两个单独 csv 文件中的多列,当前 4 列在两个 csv 文件之间全部匹配时,创建一个具有匹配四列的新 csv 文件,然后添加第二个 csv 的第 5 列和第 7 列文件,并将第一个 csv 文件第 8 列解析为第二个 csv 文件中的任何列。如果它们匹配,则取后续列的值。我知道这听起来令人困惑,但下面显示了我正在尝试做的事情
第一个.csv
Address ID X Y col5 col6 col7 col8 col9
Bob 16 1 2 x x x ABC #1
Jon 6 5 7 x x x ABC #2
Rem 16 4 9 x x x ABC #3
Bob 16 2 3 x x x ABC #4
第二个.csv
Address ID X Y col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15
Bob 16 1 2 x x x def # ABC #5 ghi # jkl #
Bob 16 1 3 x x x def # ABC # ghi # jkl #
Jon 6 5 7 x x x def # ghi # ABC #6 jkl #
Jon 6 5 8 x x x def # ghi # ABC # jkl #
Rem 16 4 9 x x x def # ghi # jkl # ABC #7
Rem 16 4 8 x x x def # ghi # jkl # ABC #
Bob 16 2 3 x x x ABC #8 def # ghi # jkl #
Bob 16 2 6 x x x ABC # def # ghi # jkl #
输出.csv
Address ID X Y 1 2 3 4 5 6
Bob 16 1 2 x x x ABC #1 #5
Jon 6 5 7 x x x ABC #2 #6
Rem 16 4 9 x x x ABC #3 #7
Bob 16 2 3 x x x ABC #4 #8
我一直在尝试使用以下条件语句:
pathFirst = "C:\First.csv"
pathFinal = "C:\Second.csv"
dataFirst = pd.read_csv(pathFirst)
dataFinal = pd.read_csv(pathFinal)
Output = pd.DataFrame(columns=['status'], index=dataFirst.index)
Output['status'] = (dataFirst['Address'] == dataFinal['address'] & dataFirst['ID'] == dataFinal['ID']).replace([True, False], ['Matching', 'Not Matching'])
Output.to_csv('C:\output.csv')
只是看看是否有一条线实际上比较正确,但似乎只有一对。我知道我做错了,我希望这能得到很好的解释,所以我非常感谢任何帮助。谢谢。
编辑: 我只希望前四列匹配。地址、ID、X、Y 之后,我想将 First.csv 文件中的第 4 列字符串值与 Second.csv 中第 4、6、8 或 10 列中的相同字符串值匹配。如果它们匹配,则从下一列中获取#value。因此,如果 Second.csv 第 1 行第 6 列与 First.csv 文件中的字符串匹配,那么我想要 Second.csv 第 1 行第 7 列 #value。
【问题讨论】:
-
5列如何匹配?两个 csv 文件的列5的值不同 -
我只希望前四列匹配。地址、ID、X、Y 之后,我想将 csv 文件 1 中的第 4 列 sting 值与 csv 文件 2 中的第 4、6、8 或 10 列中的相同字符串值进行匹配。如果它们匹配,则从下一个中获取 #value柱子。因此,如果第 1 行第 6 列与第一个 csv 文件中的字符串匹配,那么我想要第 1 行第 7 列 #value。