当前位置: 首页 > 知识库问答 >
问题:

Pandas:在滚动窗口中查找max,并返回max行和继续四行的另一列的总和

汪学真
2023-03-14

我有一个有两列的数据框。我想找到第一列的滚动5周期最大值,并计算滚动最大值行和前4行的值和第二列的总和。

下面是上面提到的Col1和Col2的期望输出的例子,滚动最大值的第三列和计算的期望结果的最后一列

下面是设置前三列的代码:

data ={'Col1': [4,2,3,4,5,6,5,4,3,2,1,4,3,2,1],
  'Col2' :[10,20,10,15,10,20,10,15,10,20,10,15,10,20,10]}
df = pd.DataFrame(data) 
df['Col1_Rolling5_Max'] = df['Col1'].rolling(5).max()
df 

以下是所需输出的示例:

共有1个答案

唐元凯
2023-03-14

您只能在下一个Rolling5_Max不同的行上计算滚动和,然后向前填充以填充其余行。

import pandas as pd
import numpy as np

data ={'Col1': [4,2,3,4,5,6,5,4,3,2,1,4,3,2,1],
  'Col2' :[10,20,10,15,10,20,10,15,10,20,10,15,10,20,10]}
df = pd.DataFrame(data) 
df['Col1_Rolling5_Max'] = df['Col1'].rolling(5).max()


df['flag'] = df['Col1_Rolling5_Max'].ne(df['Col1_Rolling5_Max'].shift())
df['Sum_5_Col1_Before_Max']= np.where(df['flag']==True,df['Col2'].rolling(5).sum(),np.nan)
df.ffill(inplace=True)
df[['Col1','Col2','Col1_Rolling5_Max','Sum_5_Col1_Before_Max']]

输出

    Col1  Col2  Col1_Rolling5_Max  Sum_5_Col1_Before_Max
0      4    10                NaN                    NaN
1      2    20                NaN                    NaN
2      3    10                NaN                    NaN
3      4    15                NaN                    NaN
4      5    10                5.0                   65.0
5      6    20                6.0                   75.0
6      5    10                6.0                   75.0
7      4    15                6.0                   75.0
8      3    10                6.0                   75.0
9      2    20                6.0                   75.0
10     1    10                5.0                   65.0
11     4    15                4.0                   70.0
12     3    10                4.0                   70.0
13     2    20                4.0                   70.0
14     1    10                4.0                   70.0
 类似资料:
  • 我有一个类似的例子,类似于我的另一个问题Pandas:在多个列上使用字典映射列,但是现在,我想不直接使用列“category”的max()值,而是间接使用它来填充第四列“category_name”中的None与问题1中的情况相同,但是增加了一个包含字符串的列。 此处“类别”列始终是填充的,而“类别名称”列有一些缺失值: 我想再一次用值填充无/南,我想使用的逻辑是:使用列“类别”中最大值的行的列“

  • 问题内容: 我正在尝试使用课程表重叠的教室,我的桌子是:课程: 日程: 课堂: 我的SQL是: 我得到: 但是我只需要显示count的所有最大值(目前只有1条这样的行)。我试过了 而是返回空表。怎么了?或者,也许是另一种解决方案的建议,以获得我所需要的? 问题答案: 以下将返回与最大计数匹配的所有组 SQL小提琴

  • 问题内容: 如何将一个表中的一行连接到具有另一表上给定列的MAX值的行? 例如,我有一张桌子和一张桌子。我想以表中该拍卖的最高出价(即列AND的最高值,其中= )加入拍卖表。 问题答案: 这很烦人。您最好在每个获胜的Auction_bid中都带有一个“优胜者”标志。 请注意,竞标价为零的竞标价将根本不会列出,而有关联的竞标(会发生这种情况)将为每个并列竞标出现一次。

  • 我有这样一个数据帧: 现在我需要按ID分组,对于col1和col4列,找到每个ID的和,并将其放入父列附近的一个新列中(例如:col3(sum)),但是对于col2和col3,找到max value。期望输出: 计算这个最简单最快的方法是什么?

  • 我试图返回一系列流媒体数据的运行中值。为此,我使用了一个最大堆(它存储序列下半部分的值)和一个最小堆(它保存序列上半部分的数值)。 特别是,我使用的是来自heapq模块的Python(2.0)内置最小堆数据结构(https://docs.python.org/2/library/heapq.html). 相反,为了构建最大堆,我只需使用需要推入堆中的数字的负数。 我的Python代码如下: 下面是

  • 问题内容: 如果我有一个分数表: 然后我运行查询: 我将收到的最大分数是20,但是返回的其余列并非来自同一行。 问题答案: 您正在使用,这是一个汇总函数。聚合函数具有将表中的多行视为一组的作用。如果您没有做任何特别的事情,则整个表中的所有行都将被用作一个大组,并且当存在类似的聚集函数时,所有这些行都将被压缩为一个聚合行。这聚光效果会也时有发生的其它集合函数一样,,和朋友(见:http://dev.