如果用python的pandas根据目的地计算单价和挂号费并为新列赋值

如果用python的pandas根据目的地计算单价和挂号费并为新列赋值

*1.[包裹运费]等于 [目的地]的[单价/公斤][重量]+[目的地]的[挂号费/件]
2.注意:[单价]和[挂号费] 都有部分重量段重复, 用pd.cut好像不行**

如果用python的pandas根据目的地计算单价和挂号费并为新列赋值

如果用python的pandas根据目的地计算单价和挂号费并为新列赋值

如何能根据实际重量和区域计算运费?


回答:

df1 = pd.read_excel('xx.xlsx', header=[0,1], index_col=0)

如果用python的pandas根据目的地计算单价和挂号费并为新列赋值

  • 查到对应单价和挂号费的思路

1 筛选出重量段,这里筛选出的最后一条数据就是对应的重量段了

>>> df1[df1.index <= 0.49]

2 筛选出目的地

>>> df1[df1.index <= 0.49]['北京']

3 提取最后一条数据,此时得到的两个数据便是对应的单价和挂号费

>>> df1[df1.index <= 0.49]['北京'].iloc[-1, :].values

array([18, 8], dtype=int64)

  • df2

df2 = pd.read_excel('xx2.xlsx')

如果用python的pandas根据目的地计算单价和挂号费并为新列赋值

  • 将查找单价和挂号费的思路写成函数后代入 df2

def reckon(x):

v1, v2 = df1[df1.index <= x['重量']][x['目的地']].iloc[-1,:].values

return x['重量'] * v1 + v2

df2['运费'] = df2.apply(reckon, axis=1)

如果用python的pandas根据目的地计算单价和挂号费并为新列赋值

完整代码

df1 = pd.read_excel('xx.xlsx', header=[0,1], index_col=0)

df2 = pd.read_excel('xx2.xlsx')

def reckon(x):

v1, v2 = df1[df1.index <= x['重量']][x['目的地']].iloc[-1,:].values

return x['重量'] * v1 + v2

df2['运费'] = df2.apply(reckon, axis=1)


如果用python的pandas根据目的地计算单价和挂号费并为新列赋值

  • 将所有快递公司的参照表存入一个字典中,然后在 reckon 函数中增加一个筛选条件即可。

df2 格式为
如果用python的pandas根据目的地计算单价和挂号费并为新列赋值

修改后代码

tables ={        

'中通': pd.read_excel('中通.xlsx', header=[0,1], index_col=0),

'圆通': pd.read_excel('圆通.xlsx', header=[0,1], index_col=0),

'韵达': pd.read_excel('韵达.xlsx', header=[0,1], index_col=0),

'顺丰': pd.read_excel('顺丰.xlsx', header=[0,1], index_col=0)

}

df2 = pd.read_excel('df2.xlsx')

def reckon(x):

df = tables[x['邮寄方式']]

v1, v2 = df[df.index <= x['重量']][x['目的地']].iloc[-1,:].values

return x['重量'] * v1 + v2

df2['运费'] = df2.apply(reckon, axis=1)


将折扣放入字典,在函数中增加一行获取折扣的代码

discount = {

'圆通': 0.95,

'中通': 0.8

}

def reckon(x):

df = tables[x['邮寄方式']]

v1, v2 = df[df.index <= x['重量']][x['目的地']].iloc[-1,:].values

dis = discount.get(x['邮寄方式'], 1) # 获取折扣如果没有则返回 1

return (x['重量'] * v1 + v2) * dis

df2['运费'] = df2.apply(reckon, axis=1)


回答:

感谢大神!以上问题已经解决.

又遇到的新的问题,
运费方式中,
圆通的按全部运费的0.95折收费
中通按按全部运费的0.8折收费

如何实现?

感谢。

以上是 如果用python的pandas根据目的地计算单价和挂号费并为新列赋值 的全部内容, 来源链接: utcz.com/p/937834.html

回到顶部