我有一个数据框,根据“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 为例。
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)