我有一个财务值的数据框(df_price
)。我在其中一个数据帧的列/系列中计算移动平均值(使用一个简单的函数MA
),然后创建一个新的数据帧(df_indicators
),其中包含每个移动的数据帧作为列/系列的平均值。
我必须针对许多不同的指标和数据框重复执行相同的基本操作,因此我想创建一个函数(称之为bundle_indicators
)来执行此操作。
基本上,我想用三个参数调用bundle_indicators
:
df_price
以便bundle_indicators
在创建数据框时可以使用它的索引。我希望bundle_indicators
返回一个数据框,其中每个列/系列都以其中一个指标命名,每行/索引代表该指标的值。
以下是我目前的工作方式。它运行没有错误,但我想用函数替换最后一个段落。我已经尝试了所有我能想到但却得到错误的东西,通常与传递参数有关。我非常感谢任何人的帮助,因为我已经有很长一段时间了。
import numpy as np
import pandas as pd
# Create a new dataframe
df_price = pd.DataFrame({
'Date': ['1993.01.29', '1993.02.01', '1993.02.02', '1993.02.03', '1993.02.04', '1993.02.05', '1993.02.08', '1993.02.09', '1993.02.10', '1993.02.11'],
'Open': [43.80, 43.80, 44.05, 44.17, 44.67, 43.80, 44.05, 44.17, 44.67, 44.92],
'High': [43.80, 44.05, 44.17, 44.67, 44.92, 43.80, 43.80, 44.05, 44.17, 44.67],
'Low': [43.55, 43.80, 43.92, 44.17, 44.55, 43.80, 44.05, 44.17, 44.55, 44.89],
'Close': [43.80, 44.05, 44.17, 44.55, 44.89, 43.55, 43.80, 43.92, 44.17, 44.55],
'Volume': [1007786, 482696, 202220, 531820, 533930, 1007786, 482696, 202220, 531820, 533930]
})
# Moving Average funtion
def MA(lb, frame):
prices = frame['Close']
mavg = []
for i in range(len(prices)):
if i < lb:
mavg.append(0)
else:
sum_array = prices[(i - lb): (i + 1)]
mavg.append(np.mean(sum_array))
return mavg
# Calculate the moving average for three different lookback periods: 1, 2, 4
mavg_fast = MA(1, df_price)
mavg_med = MA(2, df_price)
mavg_slow = MA(4, df_price)
# Create a new df_indicators dataframe, using df_price's index
# TODO REPLACE THIS WITH A FUNCTION THAT RETURNS A DATAFRAME
df_indicators = pd.DataFrame({'mavg_fast': mavg_fast}, index = df_price.index)
df_indicators = df_indicators.assign(mavg_med= mavg_med)
df_indicators = df_indicators.assign(mavg_slow = mavg_slow)
print(df_indicators)
答案 0 :(得分:0)
看起来好像最终得到的数据列表与数据帧的长度相同。您只需执行df_price['new_column']=list_of_values
即可将这些值指定为数据框中的新列
这可能是你需要的。
答案 1 :(得分:0)
考虑使用字典理解构建您的数据框,以便传递到DataFrame()
调用,其中您使用{{1}遍历指标名称和值列表元素并映射键和值以作为列和行进行迁移:
zip