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
vsCol1
值,您可以在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