使用熊猫适用于if条件



下面我试着举一个问题的例子。我不确定我是否理解我收到的以下错误。f['C'], df['D'] = zip(*df.apply(lambda x: 0 if x['A'] == 1 else some_func(x['A'], x['B']), axis=1)) TypeError: 'int' object is not iterable

这是因为在这种情况下,当x[A'A']==1时返回的0只是一个int,因此不能解压缩吗?当然,任何帮助解决这个错误的人都将不胜感激!干杯

import pandas as pd
# A function that returns multiple things.
def some_func(x,y):
return x+y, x-y
# Example DataFrame
df = pd.DataFrame({'A': range(5), 'B':range(5,10,1)})
# Example usage.
df['C'], df['D'] = zip(*df.apply(lambda x: 0 if x['A'] == 1 else some_func(x['A'], x['B']), axis=1))
print(df)

您可以做两件事。

第一,正如Parfait在评论中建议的那样,返回一个元组而不是一个整数-lambda x: (0, 0) if x['A'] == 1 else some_func(x['A'], x['B'])

否则,如果你的逻辑更复杂,我建议你把if逻辑移到函数本身。

# A function that returns multiple things.
def some_func(df):
if df['A'] == 1: # Replace with your condition
return (None, None) # Return a tuple, with whatever values. I suggest None, but 0 is OK.
# Some elif logic
else:
return x+y, x-y

然后:

df['C'], df['D'] = zip(*df.apply(some_func, axis=1))

最新更新