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
。