【发布时间】:2018-10-28 22:05:18
【问题描述】:
我有一个数据框,并希望通过如下迭代函数设置一列中的值。
import pandas as pd
import numpy as np
d = {'col1': [0.4444, 25.4615],
'col2': [0.5, 0.7],
'col3': [7, 7]}
df = pd.DataFrame(data=d)
df['col4'] = df['col1'] * df['col3']/4
def func(df):
a = np.exp(-df['col4'])
n = 1
while df['col2'] < a:
a = a + df['col4'] * 4 / n
n += 1
return n
df['col5'] = func(df)
我收到一条错误消息“ValueError:系列的真值不明确。请使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。”如何按行运行函数来解决序列/歧义问题?
编辑:添加了预期的输出。
out = {'col1': [0.4444, 25.4615],
'col2': [0.5, 0.7],
'col3': [7, 7],
'col4': [0.7777, 44.557625],
'col5': [0, 49]}
dfout = pd.DataFrame(out)
我不确定 col4 和 col5 中的值是什么,但根据我试图复制的计算,这些值将是这些值。
EDIT2:我在 while 循环中错过了 n+=1。现在添加它。
EDIT3:我正在申请
f(0) = e^-col4
f(n) = col4 * f(n-1) / n for n > 0
直到 f > col2 然后返回每行 n 的值。
【问题讨论】:
-
您能否提供所需输出的示例?
-
您的函数仍然返回一个 int 而您希望 col5 被分配一个系列,它应该是
return a吗?while df['col2'] < a的预期语义是什么?您是否只想修改满足df['col2'][i] < a[i]的系数 i? -
谢谢@mcoav,但这给了我同样的理由。我想看看在每一行离开while循环之前我需要做多少次迭代,可以这么说。
-
所以
while (df['col2'] < a).any():应该可以解决问题(如果您不介意每一行执行相同数量的迭代)。 (编辑:显然不是,感谢您的编辑) -
这解决了歧义问题,但我与预期值相差甚远。 (我得到 1, 1 而我期待 0, 49)
标签: pandas function numpy dataframe iteration