csv 如何合并两个具有公共值但没有公共列的 Dataframe ?

yquaqz18  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(141)

我有两个导入CSV文件的 Dataframe
DF1:

1, 204c, 204s
2, 205c, 205s
3, ..., ...

DF2:

204c, 1000
205c, 3000
..., ...
..., ...
204s, 4000
205s, 5000

我想根据df2和df1的"c"和"d"值将df2合并到df1中,这样就可以看到类似的结果
DF3:

204c, 1000, 204s, 4000
205c, 3000, 205c, 5000

我相信它与panda. concat(),. merge()或. join()有关,但是我有点坚持使用正确的方法。
我试过使用df3 = df1.merge(df2,how ='cross'),它对每个不正确的值进行了每次合并迭代,我试过df3 = pd. concat([df1,df2],axis = 1),它更接近,但它没有考虑's'值并将其放入NaN类别

e5nqia27

e5nqia271#

下面是一种通用方法,可以处理任意数量的要Map的列:

f1 = '''1, 204c, 204s
2, 205c, 205s'''

f2 = '''204c, 1000
205c, 3000
204s, 4000
205s, 5000
'''

df1 = pd.read_csv(io.StringIO(f1), sep=r',\s*', engine='python', header=None, index_col=0)

df2 = pd.read_csv(io.StringIO(f2), sep=r',\s*', engine='python', header=None, names=['val', 'val2'])

tmp = df1.stack().to_frame(name='val')

out = (tmp.merge(df2, how='left')
          .set_axis(tmp.index)
          .unstack()
          .sort_index(level=1, axis=1, kind='stable', sort_remaining=False)
       )

print(out)

输出:

val  val2   val  val2
      1     1     2     2
0                        
1  204c  1000  204s  4000
2  205c  3000  205s  5000

相关问题