当数据中的值至少出现三次时,如何获取平均值? (Python)

问题描述 投票:0回答:1

我有一个数据框,根据“hit_num”列中值的出现,我需要获取“scores”列的平均值。以下是我为此问题创建的随机数据的示例:

# set random seed for reproducibility
np.random.seed(42)

# crate random pandas dataframe
df = pd.DataFrame({'hit_num': np.random.randint(1,5,20), 
                   'score': np.random.randint(1, 500, 20),
                   })   
df.sort_values(by='hit_num')

因此,如果某个值在 hit_num 列中至少出现 3 次。我需要创建一个新的数据框,其中包含 hit_num 值和分数的平均值。 我为创建想法而生成的数据示例 因此,hit_num 1 应该被跳过,hit_num 2 应该得到 4 个分数的平均值,hit_num 3 应该得到 7 个分数的平均值。

我尝试使用 np.mean() 或 pandas Mean,但我意识到它只会给出整个列的平均值。接下来,我搜索特定于列/行的内容。我在 stackoverflow 上找到了一些内容,展示了如何获取特定列/行组合的平均值:

df[['b', 'c']].iloc[[2,4]].mean(axis=0)

但这是针对预设的行列组合,我需要它随机才能工作。 因此,我认为我需要一个类似循环的东西来首先状态 hit_num > 3 ,然后是mean()? 然而我被困在这里了(我仍然不确定我是否应该这样做):

for hits in df:
        if df['hit_num'].value_counts() < 3:
            continue
        elif df['hit_num'].value_counts() => 3:
            df.mean()

但我不知道如何说取“分数”列的平均值,但仅以 hit_num 2 为例。

python mean
1个回答
0
投票
import numpy as np
import pandas as pd

# Set random seed for reproducibility
np.random.seed(42)

# Create random pandas DataFrame
df = pd.DataFrame({'hit_num': np.random.randint(1, 5, 20), 
                   'score': np.random.randint(1, 500, 20)})

# Group by 'hit_num', filter for those occurring at least 3 times, and calculate mean of 'score'
result = df.groupby('hit_num').filter(lambda x: len(x) >= 3).groupby('hit_num')['score'].mean().reset_index()

print(result)

© www.soinside.com 2019 - 2024. All rights reserved.