使用Pandas数据帧时出现用户定义的函数问题

时间:2018-01-31 12:23:25

标签: python pandas

在使用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功能有什么问题?

1 个答案:

答案 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