使用“to_frame”合并Pandas Dataframe而不重复

时间:2017-07-28 21:43:38

标签: python pandas numpy

我正在将DataFrame(df1)中的一列与另一个DataFrame合并(df2,两者都具有相同的索引。此操作的结果为我提供了更多我开始使用的行(重复)。有没有办法避免重复?请参阅下面的示例代码来复制我的问题。

df1 = pd.DataFrame([[1, 1.0, 2.3,0.2,0.53], [2, 3.35, 2.0,0.2,0.65], [2,3.4, 
                   2.0,0.25,0.55]],
                   columns=["Sample_ID", "NaX", "NaU","OC","EC"])\
                   .set_index('Sample_ID')   

df2 = pd.DataFrame([[1,0.2, 1.5, 82], [2, 3.35,2.4,92],[2, 3.4, 2.0,0.25]],
                columns=["Sample_ID", "OC","Flow", "Diameter"])\
                .set_index('Sample_ID')

df1 = pd.merge(df1,df2['Flow'].to_frame(), left_index=True,right_index=True)

我的结果(下面)有两个条目,样本“2”以3.35开头,然后两个条目为“2”,以3.40开头。

我所期待的只是“2”的两个条目,一个以3.35开头,另一个以“2”开头,以3.40开头。所以总行数应该只有三行,而我现在总共有5行数据。

你能看看这是什么原因吗?谢谢你的帮助!

        NaX NaU OC  EC  Flow 
 Sample_ID                  
    1   1.00    2.3 0.20    0.53    1.5
    2   3.35    2.0 0.20    0.65    2.4
    2   3.35    2.0 0.20    0.65    2.0
    2   3.40    2.0 0.25    0.55    2.4
    2   3.40    2.0 0.25    0.55    2.0

1 个答案:

答案 0 :(得分:1)

你想要做的是连接如下:

pd.concat([df1, df2['Flow'].to_frame()], axis=1)

...返回所需的输出。 axis=1参数让你"粘在"额外的列。

至于为什么您的联接返回Sample_ID = 2两倍的条目,您可以read through the docs加入。相关部分是:

  

在SQL /标准关系代数中,如果两个表中的键组合出现多次,则生成的表将具有关联数据的笛卡尔积。