我试图计算一个动态移动平均线的基础上的价值在现有的列。我试图实现的操作是,我有一个样本数据框架,其中有三列a,b,c。我想写一个动态函数来应用于我的整个数据框架,其中创建了一个新的列d,这样
列d值应根据列b中的窗口大小计算为列c中值的移动平均值。如果列b中的值是负的,则必须向后计算平均值,如果是0,则平均值将是nan,如果列b的值大于或小于 Dataframe 的长度,则平均值将等于列C中的值。
更好地理解;索引0处的df ['d ']应该是[100,53,48,28]的平均值,因为索引0处的df ['b']是4。索引1处的相似df ['d ']应该是[53,100]的平均值,因为索引1处的df ['b']是-2。因为它是-2,所以它以相反的顺序运行。同样地,index 2处的df ['d]应该是[48,28]的平均值,因为index 2处的df ['b ']是2。索引3处的df ['d ']应=' nan ',因为索引3处的df ['b']为0。索引4处的df ['d ']应= 1,因为索引4处的df ['b']为1。最后,索引5处的df ['d ']应该等于202,因为索引5处的df ['b']是4。前面没有4行可以计算移动平均线。
我的代码如下,它给了我奇怪的结果。任何帮助都很感激。
import numpy as np
import pandas as pd
# Create the DataFrame
data = {
'a': [1, 2, 3, 4, 5, 6],
'b': [4, -2, 2, 0, 1, 4],
'c': [100, 53, 48, 28, 18, 202]
}
df = pd.DataFrame(data)
# Function to calculate the custom rolling average
def custom_rolling_average(window_values):
if len(window_values) > 0:
return window_values.mean()
else:
return np.nan
# Calculate the rolling average
df['d'] = np.nan
for i, row in df.iterrows():
window_size = abs(row['b'])
window_start = max(i - window_size + 1, 0)
window_end = i
window_values = df.loc[window_start:window_end, 'c'].astype(float)
if window_size == 0:
df.at[i, 'd'] = np.nan
else:
df.at[i, 'd'] = custom_rolling_average(window_values)
1条答案
按热度按时间ymdaylpp1#
您可以用途:
输出: