Pandas 使用其他列的值使用公式添加列

Pandas 使用其他列的值使用公式添加列,pandas,Pandas,我有一个现有的df。我想用RSI列来扩展它。 RSI使用返回数字的函数RSI_func(close)计算。我试过官方的代码(参见编码2)和3),以及编码7)和许多其他示例,但都无法实现。 我试过了,当然没有编号: 1) df['RSI'] = rsi_func(df['close']) 2) df.assign(RSI=lambda x: rsi_func(close)) 3a) rsi = rsi_func(df['close']) 3b) print(rs

我有一个现有的df。我想用RSI列来扩展它。 RSI使用返回数字的函数RSI_func(close)计算。我试过官方的代码(参见编码2)和3),以及编码7)和许多其他示例,但都无法实现。 我试过了,当然没有编号:

    1)  df['RSI'] = rsi_func(df['close'])
    2)  df.assign(RSI=lambda x: rsi_func(close))
    3a) rsi = rsi_func(df['close'])
    3b) print(rsi)
    3c) df.assign(RSI=rsi)
    4)  df.assign(RSI=rsi_func(df['close']))
    5)  df.assign(RSI=lambda x: rsi_func(close))
    6)  df['RSI'] = df.apply(lambda x: rsi_func(x['close']))
    7)  df['RSI'] = df['close'].apply(rsi_func)

当我尝试3a+b+c时,会打印一个带有RSI值的python列表。但3c并没有将RSI附加到df中。如何使用RSI_func(close)的返回创建RSI并将其附加到df?

您可以将map与lambda表达式一起使用

df['RSI'] = df['close'].map(lambda x: rsi_func(x))
使用基本数据帧进行测试:

def rsi_func(close):
    return close /10
df['RSI'] = df['close'].map(lambda x: rsi_func(x))
df
Out[11]: 
    close    RSI
0  20.02  2.002
1  20.04  2.004
2  20.05  2.005

可以将map与lambda表达式一起使用

df['RSI'] = df['close'].map(lambda x: rsi_func(x))
使用基本数据帧进行测试:

def rsi_func(close):
    return close /10
df['RSI'] = df['close'].map(lambda x: rsi_func(x))
df
Out[11]: 
    close    RSI
0  20.02  2.002
1  20.04  2.004
2  20.05  2.005

['close']是df中带有数值的列。打印(df.descripe())返回['close']
df.assign()
的最小值、最大值、平均值等。它不会改变df的位置-它会返回修改后的df,所以将其分配回df:
df=df.assign(…)
谢谢,df确实是用RSI扩展的,但所有行在['RSI']中都包含相同的值。
“RSI_func(close)返回一个数字”
-很明显,如果函数返回标量值,那么每个行中都会有标量值。我怀疑rsi_func的返回是一个列表,而不是单个值。当我将rsI_func修改为close*2时,['rsI']保存close*2的值。因此,我怀疑我的问题在de rsi_func中。['close']是df中带有数值的列。打印(df.descripe())返回['close']
df.assign()
的最小值、最大值、平均值等。它不会改变df的位置-它会返回修改后的df,所以将其分配回df:
df=df.assign(…)
谢谢,df确实是用RSI扩展的,但所有行在['RSI']中都包含相同的值。
“RSI_func(close)返回一个数字”
-很明显,如果函数返回标量值,那么每个行中都会有标量值。我怀疑rsi_func的返回是一个列表,而不是单个值。当我将rsI_func修改为close*2时,['rsI']保存close*2的值。因此,我怀疑我的问题出在de rsi_func中。我得到一个索引器:列表分配索引超出范围“作为结果。检查关闭列中的n/a字段,使用测试更新答案。我得到一个索引器:列表分配索引超出范围”作为结果。检查关闭列中的n/a字段,使用测试更新答案