gpt4 book ai didi

python - 系列的平均值,跳过元素[0]

转载 作者:行者123 更新时间:2023-12-01 01:10:33 24 4
gpt4 key购买 nike

我在数据框中有一列,每行包含一系列不同大小的列:

values
[0.0,2.3,4.6,99,100,200,...]
[0.0,4.6,7.8,10,20,25,10,5.5,12,...]
.
.
.

我计算了每个系列的平均值如下:

from statistics import mean
df['average_values'] = df['values'].map(mean)
df.head()

这将返回:

values                          average_values   
[0.0,2.3,4.6,99,100,200,...] 7.6
[0.0,4.6,7.8,10,20,25,...] 10.5
.
.
.

但是,每个系列都以 0.0 开头,我需要将其从平均值列的计算中删除。

我的尝试

我尝试创建一个新列“nan_values”,它将复制原始值列,但所有 0.0 值都替换为 NaN:

#create new column
df['nan_values'] = df['values'].copy()

#replace the 0.0 in each series with NaN
df['nan_values'] = df['nan_values'].replace(0, np.NaN)

我想我会产生一个看起来像这样的系列:

[NaN, 2.2, 4.4, 5, 3.3, 7.1, ...]

我需要计算多行系列的平均值,但跳过索引 0 处的元素。

最佳答案

通过索引删除第一个值[1:]:

from statistics import mean
df['average_values'] = df['values'].map(lambda x: mean(x[1:]))

或者:

df['average_values'] = df['values'].str[1:].map(mean)
#alternative
#df['average_values'] = df['values'].str[1:].map(np.mean)
<小时/>
print (df)
values average_values
0 [0.0, 2.3, 4.6, 99, 100, 200] 81.1800
1 [0.0, 4.6, 7.8, 10, 20, 25, 10, 5.5, 12] 11.8625

如果要删除 0 值,请使用带有过滤或 filter 的列表理解:

df['average_values'] = df['values'].map(lambda x: mean([y for y in x if y != 0]))

或者:

df['average_values'] = df['values'].map(lambda x: mean(filter(lambda y: y != 0, x)))

关于python - 系列的平均值,跳过元素[0],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54904632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com