"如何使用Python找出每周的前10个最优值?"

2024-04-18 18:28:25 发布

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

我想返回我的数据帧中每周表现最好的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名


Tags: 数据namedfsqlrangeminmaxcons
1条回答
网友
1楼 · 发布于 2024-04-18 18:28:25

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

对于你的问题,这里有一个解决方案

首先,我们需要创建一些列来标识一年中的星期(rtbin重命名为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\u名称记录。你知道吗

然后我们将每年(每年、每周)选出前10名

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

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

这会给你想要的结果。你知道吗

相关问题 更多 >