[英]Pandas merge on first column
我正在嘗試合並的條目中,合並兩個具有重復行的熊貓數據框(此處的行由與“ a”和“ b”相對應的2組成)。 結果,熊貓將重復行的笛卡爾積乘以如下所示:
In [8]: df1 = pd.DataFrame({'a' : [1, 2, 2], 'b' : [2, 2, 2], 'c' : [3, 6, 6]})
In [9]: df2 = pd.DataFrame({'a' : [2, 2], 'b' : [2, 2], 'd' : [2, 5]})
In [10]: df1.merge(df2, how='outer', on=['a', 'b'])
Out[10]:
a b c d
0 1 2 3 NaN
1 2 2 6 2.0
2 2 2 6 5.0
3 2 2 6 2.0
4 2 2 6 5.0
我想要的結果是,每個重復行之間僅按它們出現的順序進行一次合並(在這種情況下,數字通過索引)。 所以我想要的輸出是:
In [12]: df_output = pd.DataFrame({'a' : [1, 2, 2], 'b' : [2, 2, 2], 'c' : [3, 6
...: , 6], 'd' : [np.nan, 2, 5]})
In [13]: df_output
Out[13]:
a b c d
0 1 2 3 NaN
1 2 2 6 2.0
2 2 2 6 5.0
我該怎么做?
您需要按GroupBy.cumcount
創建的計數器創建幫助列:
df1 = pd.DataFrame({'a' : [1, 2, 2], 'b' : [2, 2, 2], 'c' : [3, 6, 6]})
df2 = pd.DataFrame({'a' : [2, 2], 'b' : [2, 2], 'd' : [2, 5]})
df1['g'] = df1.groupby(['a', 'b']).cumcount()
df2['g'] = df2.groupby(['a', 'b']).cumcount()
df = df1.merge(df2, how='outer', on=['a', 'b', 'g'])
print (df)
a b c g d
0 1 2 3 0 NaN
1 2 2 6 0 2.0
2 2 2 6 1 5.0
最后刪除g
列:
df = df1.merge(df2, how='outer', on=['a', 'b', 'g']).drop('g', axis=1)
print (df)
a b c d
0 1 2 3 NaN
1 2 2 6 2.0
2 2 2 6 5.0
drop_duplicates
不能解決您的問題嗎?
df = df1.merge(df2, how='outer', on=['a', 'b'])
df = df.drop_duplicates()
我認為就足夠了
df1.merge(df2, how = 'outer').drop_duplicates()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.