在使用Pandas DataFrames时调用用户定义的函数时遇到了问题。股票市场数据以下列形式从SQLite3数据库中读取:
日期高位低位收盘
以下代码汇总了每行的高,低和接近值,并添加了一个新列' Sum'到df:
def Sum(h, l, c):
return h+l+c
df.loc[:, 'Sum'] = Sum(df['high'], df['low'], df['close'])
high low close Sum
date
2018-01-23 80.65 78.25 79.45 238.35
2018-01-24 81.65 79.50 80.50 241.65
2018-01-25 81.70 80.25 81.10 243.05
2018-01-26 81.25 78.25 78.75 238.25
2018-01-29 70.95 62.25 64.15 197.35
但是,如果更改函数以返回df中每行的最大值high,low,close,则错误(" ValueError:Series的真值是不明确的。")是生成。
def Max(h, l, c):
return max(h, l, c)
df.loc[:, 'Max'] = Max(df['high'], df['low'], df['close'])
Max功能有什么问题?
答案 0 :(得分:0)
Jon Clements的评论是你应该去的方式。但是,如果您希望执行更复杂的并发症,pd.DataFrame.apply
具有此功能:
注意我已重命名您的函数以避免与内置函数冲突。
def max_df(h, l, c):
return max(h, l, c)
df['Max'] = df.apply(lambda row: max_df(row['high'], row['low'], row['close']), axis=1)
如果您无法进行计算,那么这是一篇了解这些选项的好文章:
Difference between map, applymap and apply methods in Pandas