Pandas:一個apply+lambda的小技巧

前言:有兩張表,有一個關鍵字段作爲連接,要比對兩張表裏某個值的變化,用Python該怎麼寫呢?
excel很簡單,vlookup+if即可;SQL裏的話,就是left join,然後再case when
python裏的思路也是一樣,我們需要merge後再apply
以下表爲例
在這裏插入圖片描述
在這裏插入圖片描述
如果不用lambda,只用apply的話,代碼如下:

import pandas as pd

def get_value(df):
    '''計算兩個原資費和現資費的大小,增值的返回1,否則返回0'''
    if df['套餐資費2'] > df['套餐資費1']:
        return 1
    else:
        return 0

t1 = pd.read_excel('test.xlsx', sheet_name='Sheet1')
t2 = pd.read_excel('test.xlsx', sheet_name='Sheet2')

new_df = t1.merge(t2, how='left', on='手機號碼')
new_df['資費對比結果'] = new_df.apply(get_value, axis=1)
print(new_df)

如果使用lambda+apply組合的話,代碼如下:

import pandas as pd

t1 = pd.read_excel('test.xlsx', sheet_name='Sheet1')
t2 = pd.read_excel('test.xlsx', sheet_name='Sheet2')

new_df = t1.merge(t2, how='left', on='手機號碼')
new_df['資費對比結果'] = new_df.apply(lambda x: 1 if x['套餐資費2'] > x['套餐資費1'] else 0, axis=1)
print(new_df)

要節省很多代碼行數,而且也更簡單明瞭

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章