合并不同长度的数据帧

时间:2015-07-18 13:45:38

标签: python csv pandas

我有两个看起来像这样的数据框,

DF1:

SP1          Count1
ANDGER        2
CARCRA        4
CAR           3
PANVIR        1

和df2:

SP2          Count2
CARCRA        7
CAR           6
PANVIR        4

我想根据匹配第一列中的id(df1中的SP1和df2中的SP2)将它们合并在一起,但我想保留仅在其中一个数据帧中的ID 。

我想要的输出是:

Species     Count1  Count2
ANDGER        2       NaN
CARCRA        4        7
CAR           3        6
PANVIR        1        4

我试过了:

df1.set_index('SP1')
df2.set_index('SP2')
pd.merge(df1, df2,left_index=True, right_index=True)

但它不会保留不匹配的内容。

编辑:

值得为我起作用的代码是:

pd.merge(df1,df2,left_index=True, right_index=True, how='outer')

2 个答案:

答案 0 :(得分:1)

您可以使用pd.concat()

import pandas as pd

# your data
# ===========================
df1

      SP1  Count1
0  ANDGER       2
1  CARCRA       4
2     CAR       3
3  PANVIR       1

df2

      SP2  Count2
0  CARCRA       7
1     CAR       6
2  PANVIR       4

# processing
# ==========================
pd.concat([df1.set_index('SP1'), df2.set_index('SP2')], axis=1, join='outer')

        Count1  Count2
ANDGER       2     NaN
CAR          3       6
CARCRA       4       7
PANVIR       1       4

答案 1 :(得分:1)

您可以按如下方式使用pd.merge

print pd.merge(df1,df2, left_on='SP1', right_on='SP2', how='outer')
      SP1  Count1     SP2  Count2
0  ANDGER       2     NaN     NaN
1  CARCRA       4  CARCRA       7
2     CAR       3     CAR       6
3  PANVIR       1  PANVIR       4

如果您要合并的列中有重复的条目,请更好地使用groupby。