2017-07-23 34 views
2

以下是數據框列的外觀。pandas數據框中的內部連接/合併給出比左側數據幀更多的行

DF1 = '設備號', '日期',... < < 10其他列>> 3500個記錄

DF2 = '設備號', '日期',.... < < 9其他列>> 14000個記錄

在每個數據幀中,既不「設備號」,也沒有「日期」是唯一的。但是,它們的組合對於識別行是唯一的。

我想形成一個新的數據框,它與來自df1和df2的行匹配,其中設備號和日期都相等,並且具有來自這些df1和df2的所有列。我正在嘗試的熊貓命令是

df3=pd.merge(df1, df2, how='inner', on=['device number', 'date']) 

但是,df3給了我一個shape(14,000,21)的數據框。列號是有道理的,但內連接怎麼能有比任何左邊的數據框更多的行?這是否意味着我對內連接的理解有缺陷?另外,我怎樣才能達到我描述的結果?

+0

這將是很好,如果你可以張貼驗證您的索賠代碼 - 例如組合是獨特的。如果兩個數據幀都包含唯一密鑰,則結果爲(3,500,21)。 –

+0

@SanghackLee謝謝,我在Python中很綠。唯一性來自我對數據源和領域知識的瞭解。但任何想法如何從代碼驗證它?我想到了DataFrame.duplicated函數,但不知道如何使它在兩個字段的組合上工作。 – Della

+0

也許...... print(len(set(zip(df1 ['device number'],df1 ['date']))))'和df2。 (其他方法可以在[這裏]找到(https://stackoverflow.com/questions/26977076/pandas-unique-values-multiple-columns) –

回答

1

只有這樣我可以看到這種情況發生......特別是與14000是相同的確切數量,因爲記錄在df2的數量如果df2列組合獨特。

您可以驗證它們與以下(True如果唯一的)獨特

df2.duplicated(['device number', 'date']).sum() == 0 

或者

df.set_index(['device number', 'date']).index.is_unique 
相關問題