python dataframe apply function ที่มี parameter มากกว่า 1 ตัว

จากโค๊ดนี้ 

import numpy
import pandas as pd
# ชนิด 1 parameter ให้ส่วนลดปริมาณ เกินกว่า 100 แต่ไม่เกิน 500
def disc_price1(q:int):
    if q > 100 and q <= 500 :
        return 1.4
    else :
        return 1
    
# ชนิด 2 parameter
def set_price(proid, qty):
    if proid == 'SKU1' and qty >100 :
        return 120
    elif proid == 'SKU1' :
        return 140
    else :
        return 110
        
        
print(set_price('SKU9',1)) # ทดสอบ ฟังชั่น ทำงานได้ตามต้องการ

# ข้อมูลทดสอบ
df = pd.DataFrame({'PROID': {0: 'SKU1', 1: 'SKU1', 2: 'SKU2', 3: 'SKU3'},
 'QTY': {0: 100, 1: 200, 2: 300, 3: 500},
 'ORDDATE': {0: '2022-01-01', 1: '2022-02-01', 2: '2022-01-01', 3: '2022-02-01'}})
 
df = df.append([{'PROID':'SKU4','QTY':501,'ORDDATE':'2022-02-01'}], ignore_index=True)
print(df)

# apply ด้วย 1 parameter
df['DISC_PCT'] = 1-df['QTY'].apply(disc_price1) 
print(df)

# ถ้าใช้ list comprehension
# ทำได้ แต่อยากถามว่า กรณีเราใช้ apply() , applymap() ชนิดมาพารามิเตอร์มากกว่า 1 ตัว ทำอย่างไร ครับ?
df['SETPRICE_byList'] = [set_price(i, q) for i, q in zip(df['PROID'],df['QTY'])]
print(df)

# อยากถามว่า กรณีเราใช้ apply() , applymap() ชนิดมาพารามิเตอร์มากกว่า 1 ตัว ทำอย่างไร ครับ?
df['SETPRICE_byApplyFunction'] = numpy.nan
print(df)

live : https://www.online-python.com/cwH6709YXj

ประเด็นคำถามคือ 
# กรณีเราใช้ apply() , applymap() ชนิดมาพารามิเตอร์มากกว่า 1 ตัว ทำอย่างไร ครับ?
df['SETPRICE_byApplyFunction'] = df.applymap(.........)
print(df)

หรือเค้ามีวิธีอื่นที่ง่ายกว่านี้ไหมครับ? ขอบคุณครับ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 1

df['SETPRICE'] = list(map(set_price,df['PROID'],df['QTY']))
df['SETPRICE_APPLY'] = df[['PROID','QTY']].apply(lambda x : set_price(x[0],x[1]), axis=1 )

วิธีอื่น ๆ อีกใน...

How to apply a function to two columns of Pandas dataframe
https://stackoverflow.com/a/70899332/6370128
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่