假设我有一个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/