替换数据框中大量条目的有效方法

问题描述

我正在为工作创建一个自动化程序,该程序会自动负责生成我们的月末报告。我遇到的挑战是想出一种有效的方法来进行大量替换,而无需 for 循环和一堆 if 语句。

我有一个大约有 113 个条目的文件,它告诉我哪些条目需要替换为另一个条目

乌姆 实际计量单位
0 ML
3 ML
4 联合国
7 ML
11 ML
12 ML
19 ML
55 ML
4U GR

有大量重复项,我将值更改为相同的值(3,7,11 等更改为 ML),但似乎我仍然必须为每个循环遍历相当数量的 if 语句细胞。我可能会用另一种语言为此使用 switch 语句,但 python 似乎没有它们。

我在想什么的伪代码

for each in dataframe
   if (3,11,etc...)
      change cell to ML
   if (4)
      change cell to UN
   if (4U)
      change cell to GR
etc. 
 

是否有更有效的方法来做到这一点,或者我是否在正确的轨道上?

解决方法

我会根据您的 mapping_df 创建一个字典(我假设您发布的数据框称为 mapping_df),然后 map 在您的主数据框中生成结果。

这样你就不需要手动声明任何东西,所以即使在113行​​mapping_df中添加了新行,代码仍然可以顺利运行:

# Create a dictionary with your Uom as Key
d = dict(zip(mapping_df.Uom,mapping_df['Actual UOM']))

# And then use map on your main_df Uom column 
main_df['Actual Uom'] = main_df['Uom'].map(d) 

像上面这样的东西应该可以工作。

,

Pandas 可能会抛出警告/错误消息,例如“Series 的真值不明确...”。

我不确定您要实现的目标,但为了让您开始,如果您想修改“Uom”列,您可以这样做:

mask = df["Uom"] == 3 | df["Uom"] == 7 | df["Uom"] == 11
df.loc[mask,"Uom"] = "ML"
df.loc[df["Uom"] == 4,"Uom"] = "UN"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...