根据另一列的平均切片添加新列

2024-05-08 18:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个数据帧

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?你知道吗


Tags: columns数据代码indataframedfforlen
1条回答
网友
1楼 · 发布于 2024-05-08 18:24:35

可以反转列,取增量平均值,然后再次反转。你知道吗

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.])

相关问题 更多 >