python Pandas高效地Map字典中的值

iaqfqrcu  于 2023-01-19  发布在  Python
关注(0)|答案(1)|浏览(188)

我有一个Pandas Dataframe df:-
| 识别号|成本|1F|二楼|3F|第四代|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 1个|三六二|无|1个|1个|1个|
| 第二章|二百六十九|无|1个|无|无|
| 三个|三四六|1个|1个|1个|1个|
| 四个|三四二|无|无|无|无|
我有一本total_cost字典:
总成本={'1F':0.047,“2F”:0.03,“3F”:0.023,“4G”:0.025分
我想添加一个TOTAL_COST列,这样只要存在1,该列的COST *(total_cost字典中的值)就会相乘并相加。
Dataframe 有大约一百万条记录,最有效的方法是什么?预期df:-
| 识别号|成本|1F|二楼|3F|第四代|总计_成本|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 1个|三六二|无|1个|1个|1个|二十八二百三十六|
| 第二章|二百六十九|无|1个|无|无|八点零七分|
| 三个|三四六|1个|1个|1个|1个|四十三点二五|
| 四个|三四二|无|无|无|无|无|

d7v8vwbk

d7v8vwbk1#

使用切片只获取字典中作为键存在的列,然后乘以它,聚合为每行summultiply乘以COST:

df['TOTAL_COST'] = df[list(total_cost)].mul(total_cost).sum(axis=1).mul(df['COST'])

或者,将字典强制转换为Series(不匹配的列将变为NaN):

df['TOTAL_COST'] = df.mul(pd.Series(total_cost)).sum(axis=1).mul(df['COST'])

输出:

ID  COST  1F  2F  3F  4G  TOTAL_COST
0   1   362   0   1   1   1      28.236
1   2   269   0   1   0   0       8.070
2   3   346   1   1   1   1      43.250
3   4   342   0   0   0   0       0.000

相关问题