จากโค๊ด
# สิ่งที่อยากได้ คือ 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)
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 ออกหนะครับ
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)