python - 如何在Python中找到每周表现最好的10个值?

标签 python pandas numpy group-by

我想返回 DataFrame 中每周表现最好的 10 个(平均)变量。大约相当于 2 年的数据

我正在使用 Python 来解决这个问题,但最终也想用 SQL 来解决这个问题。

我已经能够生成返回最近一周前 10 名的代码,但希望每周都有结果

  • 创建用于创建日期时间范围的 df
range_max = rtbinds['pricedate'].max()
range_min = range_max - datetime.timedelta(days=7)

sliced_df = rtbinds[(rtbinds['pricedate'] >= range_min) 
                    & (rtbinds['pricedate'] <= range_max)]
  • 按“阴影”分组
sliced_df.groupby(['pricedate','cons_name']).aggregate(np.mean)
         .sort_values('shadow').head(10)
  • 返回第一周的数据。
    pricedate   cons_name       shadow
    2019-04-26  TEMP71_24753    -643.691
    2019-04-27  TMP175_24736    -508.062
    2019-04-25  TMP109_22593    -383.263
    2019-04-23  TEMP48_24759    -376.967
    2019-04-29  TEMP71_24753    -356.476
                TMP175_24736    -327.230
                TMP273_23483    -303.234
    2019-04-27  TEMP71_24753    -294.377
    2019-04-28  TMP175_24736    -272.603
                TMP109_22593    -270.887

但是,我想要一个列表,该列表可以返回每周的前 10 名,直到我的数据的最早日期

最佳答案

注意 pd.sort_values 默认情况下按升序排序,因此当您采用 head(10) 时,如果我们考虑自然排序,它实际上是最差的 10实数。

现在针对您的问题,这里有一个解决方案

首先我们需要创建一些列来标识一年中的第几周(rtbins 已重命名为 df):

df['year'] = df['pricedate'].apply(lambda x: x.year)
df['week'] = df['pricedate'].apply(lambda x: x.isocalendar()[1])

然后我们将按['year', 'week', 'cons_name']对数据进行分组:

df2 = df.groupby(['year', 'week', 'cons_name'], as_index=False).aggregate(np.mean)

您现在应该得到一个数据框,其中每个(年、周)您只有一条具有平均阴影的 cons_name 记录。

然后我们将选取每个(年、周)的前 10 名

def udf(df):
    return df.sort_values('shadow').head(10)

df2.groupby(['year', 'week'], as_index=False).apply(udf)

这应该会给你你想要的结果。

关于python - 如何在Python中找到每周表现最好的10个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56172140/

相关文章:

python hashlib sha224 - 输入中不支持的字符

python-3.x - 我如何从函数返回数据框

python - 如何将 numpy 数组拆分为单个值?

python - 有没有更好的方法来删除长度等于或高于阈值的连续零部分?

python - 将文本文件中的多行拆分为列表列表

python - tensorflow 导入 vgg16 失败

python - Apache CustomLog 管道到脚本失败

python - Pandas DataFrame 中的 JSON 对象

python - 根据Python中的日期提取和 reshape 数据

python - 使用 Python Pytables 加载 Matlab 稀疏矩阵