我有一个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
1 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
由于您想将函数应用于具有相同值 的行组col1,因此您可以使用groupby()和transform()
df['Col1'] = df.groupby('Col1')['Col2'].transform(my_func)
另外,关于Nonevs value,你可以在likeCol1里面处理它my_func
def my_func(e):
result = #your logic
return result if result!=None else e
添加回答
举报
0/150
提交
取消