假设我有一个DataFrame

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()


我该如何以一种简洁,惯用的方式来完成此任务,并且不会引发SettingWithCopyWarning

最佳答案

您可以反转该列,采用增量平均值,然后再次将其反转。

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


类似的ndarray级方法可能是使用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.])

关于python - 根据另一列的平均切片添加新列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49838084/

10-16 17:31