根据行值合并pandas数据框。

3

我有两个看起来像这样的 .tsv 文件:

ID prop name size
A   x   rob    2
B   y   sally  3
C   z   debby  5
D   w    meg   6

并且

ID lst_name area
A   sanches  4
D    smith   7 
C    roberts  8

我已将它们加载到pandas DataFrame中,并希望合并它们以获取一个新的DataFrame:

ID-name prop name size lst_name area
A   x   rob    2    sanches  4
B   y   sally  3
C   z   debby  5   roberts   8
D   w    meg   6    smith    7

我一直尝试使用pd.merge()来实现这个目标,但是以下问题困扰了我:

df = pd.DataFrame.from_csv("a.tsv", sep='\t')
df1 = pd.DataFrame.from_csv("b.tsv", sep='\t')
result = pd.merge(df, df1, how='inner',on=["ID","ID-name"])

使用Pandas可以完成这样的合并吗?

2个回答

0
你需要的是一个左连接(或外连接,当然这取决于你的情况),因为在这个示例中,即使df1上没有B的记录,你也想看到B的记录。 result = pd.merge(df, df1, how="left",on=["ID","ID"])
      prop   name  size lst_name  area
ID ID
A  A     x    rob     2  sanches   4.0
B  B     y  sally     3      NaN   NaN
C  C     z  debby     5  roberts   8.0
D  D     w    meg     6    smith   7.0

0

这是一种使用join的方法。

df1 = pd.DataFrame({'ID':['A','B','C','D'],'prop':['x','y','z','w'],'name':['rob','sally','debby','meg'],'size':[2,3,5,6]})
df2 = pd.DataFrame({'ID':['A','D','C'],'lst_name':['sanches','smith','roberts'],'area':[4,7,8]})
df1.set_index('ID').join(df2.set_index('ID')).reset_index()

>>>
  ID prop   name  size lst_name  area
0  A    x    rob     2  sanches   4.0
1  B    y  sally     3      NaN   NaN
2  C    z  debby     5  roberts   8.0
3  D    w    meg     6    smith   7.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接