python full outer join

จากโค๊ด
# สิ่งที่อยากได้ คือ full outer join code ที่ไม่มีใน hm แต่มีใน ex และ code ที่ไม่มีใน ex แต่ไม่มีใน hm
# แบบนี้
# A01-00   200  200.000000  120.0  120.0     80   80    0.0    NaN
# A01-01   200  200.000000    0.0    NaN     80   80  120.0  120.0
# A01-02   500  250.000000    0.0    NaN    150   75  350.0  175.0
แต่มันออกมาแบบนี้

ต้องแก้ยังไงครับ ถึงได้ right outer join

ผมลอง rpt = pd.merge(hm,ex, how='right') แล้วมันออกมา แบบ มี code ที่ intersect กันมาด้วย อยากเอา intersect ออกหนะครับ
import pandas as pd

file={}
file['home_sheet'] = {'code':['A01-03','A01-00','A01-03','A02-03'],
                    'sale':[100,200,400,500],
                    'dr_exp':[50,120,220,250]
                    }

file['ex_sheet']= {'code':['A01-02','A01-01','A02-03','A01-03','A01-02'],
                    'sale':[100,200,400,500,400],
                    'ex_exp':[50,120,220,250,300]
                    }

hm=pd.DataFrame(file['home_sheet'])
ex=pd.DataFrame(file['ex_sheet'])

hm['margin'] = hm['sale']-hm['dr_exp']
ex['margin'] = ex['sale']-ex['ex_exp']

rpt = pd.merge(hm,ex, how='outer')

d = rpt.groupby('code')
print(d.agg(['sum','mean']))

less_ex = rpt[rpt['dr_exp'].notna()]
less_hm = rpt[rpt['sale'].notna()]
print('----less ex----')
print(less_ex)
print('----less hm----')
print(less_hm)
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่