Python 合并不同长度的数据帧

Python 合并不同长度的数据帧,python,csv,pandas,Python,Csv,Pandas,我有两个数据帧,看起来像这样 df1: 和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

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

df1:

和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')

您可以使用
pd.concat()


您可以按如下方式使用
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

嗯,它抛出了一个错误
重新索引只对唯一值的索引对象有效
@StefanoPotter你能上传你的真实数据文件吗?代码对于您提供的示例数据非常有效。它是一个相当大的文件,我不知道如何上传到stackexchange,但您的代码是正确的。我会试着弄清楚是什么把它扔出去的loop@StefanoPotter如果在合并时使用的列中有重复的条目,则更好地使用groupby。我以前使用过groupby,但我不确定在这种情况下如何使用它
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
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