[英]Union of two pandas DataFrames
假設我有兩個數據框:
DF1:
A
0 a
1 b
DF2:
A
0 a
1 c
我想要的結果是兩幀的聯合與表示該行屬於源數據幀一個額外的列 。 如果有重復項,應刪除重復項,相應的額外列應顯示兩個來源:
A B
0 a df1, df2
1 b df1
2 c df2
我可以得到連接數據框(df3)沒有重復,如下所示:
import pandas as pd
df3=pd.concat([df1,df2],ignore_index=True).drop_duplicates().reset_index(drop=True)
我想不出/找到一種方法可以控制哪個元素去哪里。 如何添加額外的列?
非常感謝您的任何提示。
合並indicator
參數,並重新映射結果:
m = {'left_only': 'df1', 'right_only': 'df2', 'both': 'df1, df2'}
result = df1.merge(df2, on=['A'], how='outer', indicator='B')
result['B'] = result['B'].map(m)
result
A B
0 a df1, df2
1 b df1
2 c df2
使用以下命令:
df3 = pd.concat([df1.assign(source='df1'), df2.assign(source='df2')]) \
.groupby('A') \
.aggregate(list) \
.reset_index()
結果將是:
A source
0 a [df1, df2]
1 b [df1]
2 c [df2]
assign
將向您的數據幀添加名為source
的列,其值為df1
和df2
。 groupby
命令將具有相同A
值的行分組到單行。 aggregate
命令描述如何為具有相同A
每組行聚合其他列( source
)。 我使用了list
aggregate函數,因此source
列是具有相同A
的值列表。
我們使用外連接來解決這個問題 -
df1 = pd.DataFrame({'A':['a','b']})
df2 = pd.DataFrame({'A':['a','c']})
df1['col1']='df1'
df2['col2']='df2'
df=pd.merge(df1, df2, on=['A'], how="outer").fillna('')
df['B']=df['col1']+','+df['col2']
df['B'] = df['B'].str.strip(',')
df=df[['A','B']]
df
A B
0 a df1,df2
1 b df1
2 c df2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.