猿问

当列具有重复值且值来自函数时,批量替换 pandas 数据框中的值

我有一个df包含以下数据类型的 pandas 数据框:


+------+------+--+

| Col1 | Col2 |  |

+------+------+--+

| abc  |  123 |  |

| abc  |  234 |  |

| cde  |  123 |  |

| cde  |  234 |  |

| ghi  |  455 |  |

| ghi  |  755 |  |

| ghi  |  123 |  |

+------+------+--+

在其他地方,我有一个函数,它从数据帧中获取值作为输入。所以,例如,my_func(arg1, arg2, str_from_df). 我想做的是将 Col1 中的值替换为return is notmy_func时的返回值。实现此目的的一种方法是循环遍历数据帧,并一次更改 Col1 中的每个值。但这是一个非常缓慢的解决方案。在我的例子中,它的效率也很低,因为我只需要返回对每组.my_funcNonemy_funcCol1


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


扬帆大鱼
浏览 92回答 1
1回答

Smart猫小萌

由于您想将函数应用于具有相同值 的行组col1,因此您可以使用groupby()和transform() df['Col1'] = df.groupby('Col1')['Col2'].transform(my_func)另外,关于Nonevs value,你可以在likeCol1里面处理它my_funcdef my_func(e):    result = #your logic  return result if result!=None else e 
随时随地看视频慕课网APP

相关分类

Python
我要回答