如何在使用pandas数据框的apply函数时中断程序?

3
有没有一种方法可以使用apply函数为pandasdataframe计算新列,但根据某些条件“中断”它。
假设我有一个2000行的数据框,并且我的条件取决于先前计算的应用值,在第1000个行时变为false。计算接下来的1000是一种浪费,我希望pandas在第1000个后停止“应用”并将到目前为止计算出的内容返回给我。
是否可能?将返回“最初的回答”。

你好。不知道你是否找到了解决这个问题的方法? - Confounded
无法记住,抱歉。 - Chapo
2个回答

0

使用带有条件的apply函数

df['new']=df['old'].apply(lambda x: <calculation> if <condition>(ex : x == 0) else x )

或者

df.loc[df['col']=='value','col']= df.loc[df['col']=='value','col'].apply(lambda x: "new_value"  )

谢谢回复。标准本身将取决于先前计算的应用值:在这种情况下,您的解决方案将如何工作? - Chapo
这是什么标准? - nassim
标准的细节并不重要。假设在每一行中使用之前计算出的所有值,并且一个函数基于此返回布尔值。 - Chapo
问题是我能否在我的<condition>中使用到那个时刻计算出来的df['new']值? - Chapo

0

您可以仅对您想要的行应用操作。

假设您的索引是自动递增且连续的,如果不是,您可以随时执行reset_index来实现。或者您可以选择任何您想要的条件,而不是前1000行。

idx = df.index < 1000 # index of 1000 items

df.loc[idx, '<yourcolums>'] = df[idx].apply(...)

只需将 idx = <what ever your condition is> 替换为你的条件,例如:idx = df['name'].str.startswith('Peter') # 行中的列名以 Peter 开头 - hunzter
你的示例中的 name 列可以是我当前使用 apply 计算的列吗? - Chapo
it could be anything. - hunzter
我无法在您的示例中定义idx,因为apply函数尚未运行。我的条件是从apply函数的结果发出的。 - Chapo
假设我使用默认值初始化该列,然后通过应用程序进行覆盖。在这种情况下,有没有办法实现我的目标? - Chapo
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接