Python 当列具有重复值且值来自函数时,数据帧中的大容量替换值

Python 当列具有重复值且值来自函数时,数据帧中的大容量替换值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个带有以下数据类型的熊猫数据帧df: +------+------+--+ | Col1 | Col2 | | +------+------+--+ | abc | 123 | | | abc | 234 | | | cde | 123 | | | cde | 234 | | | ghi | 455 | | | ghi | 755 | | | ghi | 123 | | +------+------+--+ 在其他地方,我有一个函数,它从数据帧

我有一个带有以下数据类型的熊猫数据帧
df

+------+------+--+
| Col1 | Col2 |  |
+------+------+--+
| abc  |  123 |  |
| abc  |  234 |  |
| cde  |  123 |  |
| cde  |  234 |  |
| ghi  |  455 |  |
| ghi  |  755 |  |
| ghi  |  123 |  |
+------+------+--+
在其他地方,我有一个函数,它从数据帧中获取一个值作为输入。例如,
my_func(arg1,arg2,str_from_df)
。当
my_func
返回值不是
None
时,我想用
my_func
的返回值替换Col1中的值。实现这一点的一种方法是在数据帧中循环,每次更改Col1中的每个值。但这是一个非常缓慢的解决方案。在我的例子中,这也是低效的,因为我只需要为每组
Col1
返回一个调用
my_func
的值


我可以同时更改
Col1
中的所有
abc
吗?也就是说,测试例如
my_func(arg1,arg2,df['Col2'].iat[0])
是否为
None
(与
Col2
中的
abc
的第一个实例相对应的值),如果不是,则使用它的值替换
Col1
中的所有
abc
值。dataframe接近1M行,函数本身也不是无关紧要的,因此我希望尽可能不频繁地调用它。我还应该提到,我希望其他数据保持不变。这能做到吗?可能是一个
lambda
函数?

因为您想在具有相同值
col1
的行组上应用该函数,所以可以使用
groupby()
transform()

另外,关于
None
vs
Col1
值,您可以在
my_func
中处理它,如

def my_func(e):

  
  result = #your logic
  return result if result!=None else e 

对不起,我不太懂语法。如何从该语法将参数传递给我的函数?您可以传递列,在这种情况下将传递“Col1”(请参见更新的答案),是否需要更多参数?我不认为你会需要,因为它们将是静态变量,与行无关这似乎已经奏效,谢谢!我还发现了另一个属性错误,我认为是我的函数导致的,而不是您的解决方案,因此我会将其标记为已回答。很高兴它起到了作用,如果有帮助,请随意投票并将其作为答案:)
def my_func(e):

  
  result = #your logic
  return result if result!=None else e