根据行值合并pandas dataFrames

时间:2019-02-27 00:14:26

标签: python pandas dataframe

我有两个.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 DataFrames中,并希望将它们合并,以便获得一个新的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"])

是否可以通过熊猫完成像这样的合并?

2 个答案:

答案 0 :(得分:0)

您需要的是左连接(或外部连接,当然,这取决于您的情况),因为在此示例中,您也希望查看B的记录,即使它在df1上没有记录。

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

答案 1 :(得分: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