Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于另一列的平均切片添加新列_Python_Pandas - Fatal编程技术网

Python 基于另一列的平均切片添加新列

Python 基于另一列的平均切片添加新列,python,pandas,Python,Pandas,假设我有一个数据帧 my_df = pd.DataFrame([10, 20, 30, 40, 50], columns=['col_1']) 我想添加一个新列,其中新列中每行的值是从该行开始的col_1中值的平均值。在这种情况下,新列(我们称之为'col_2'将是[30,35,40,45,50] 下面的代码不是很好,但至少描述了如何生成值 for i in range(len(my_df)): my_df.loc[i]['col_2'] = my_df[i:]['col_1'].me

假设我有一个数据帧

my_df = pd.DataFrame([10, 20, 30, 40, 50], columns=['col_1'])
我想添加一个新列,其中新列中每行的值是从该行开始的
col_1
中值的平均值。在这种情况下,新列(我们称之为
'col_2'
将是
[30,35,40,45,50]

下面的代码不是很好,但至少描述了如何生成值

for i in range(len(my_df)):
    my_df.loc[i]['col_2'] = my_df[i:]['col_1'].mean()

如何以干净、惯用的方式执行此操作,而不使用CopyWarning引发设置?

您可以反转列,取增量平均值,然后再次反转

my_df.loc[::-1, 'col_1'].expanding().mean()[::-1]

# 0    30.0
# 1    35.0
# 2    40.0
# 3    45.0
# 4    50.0
# Name: col_1, dtype: float64
类似的数据数组级方法可以是使用
np.cumsum
并除以不断增加的元素数

np.true_divide(np.cumsum(my_df.col_1.values[::-1]), 
               np.arange(1, len(my_df)+1))[::-1]

# array([30., 35., 40., 45., 50.])

这是难以置信的优雅。谢谢。@AmiTavory是的,它是新的,在那之前有顶级函数,如
pd.expanding\u-mean