给定一个数据帧df: pd.Dataframe和来自df.index的索引子集selected_indexes,我如何使用应用于每个间隔selected_indexes[i], selected_indexes[i+1]max操作符对df进行重采样?

例如,给定一个数据帧:

   col
0    5
1    0
2    3
3    3
4    7
5    9
6    3
7    5
8    2
9    4

和 Select 索引"SELECTED_INDEX=[0,5,6,9]",并在每个间隔之间的col列上应用最大值(假设我们保留终点而不包括起点),我们应该得到:

   col
0    5
5    9
6    3
9    5

例如,第9行由第7, 8, 9 \in (6, 9]行中的max(5, 2, 4)行组成.

推荐答案

new interpretation

selected_indexes = [0, 5, 6, 9]
group = (df.index.to_series().shift() # make groups
           .isin(selected_indexes)    # based on
           .cumsum()                  # previous indices
        )

# get max per group
out = df.groupby(group).max().set_axis(selected_indexes)

# or for many aggregations (see comments):
out = (df.groupby(group).agg({'col1': 'max', 'col2': 'min'})
         .set_axis(selected_indexes)
       )

输出:

   col
0    5
5    9
6    3
9    5

previous interpretation of the question

你可能需要rolling.max分,而不是重新抽样:

out = df.loc[selected_indexes].rolling(3, center=True).max()

或者,如果您希望将±1应用于数据before选项:

out = df.rolling(3, center=True).max().loc[selected_indexes]

示例:

np.random.seed(0)
df = pd.DataFrame({'col': np.random.randint(0, 10, 10)})
selected_indexes = [1, 2, 3, 5, 6, 8, 9]

print(df)

   col
0    5
1    0
2    3
3    3
4    7
5    9
6    3
7    5
8    2
9    4


out = df.loc[selected_indexes].rolling(3, center=True).max()
print(out)

   col
1  NaN
2  3.0
3  9.0
5  9.0
6  9.0
8  4.0
9  NaN

out2 = df.rolling(3, center=True).max().loc[selected_indexes]
print(out2)

   col
1  5.0
2  3.0
3  7.0
5  9.0
6  9.0
8  5.0
9  NaN

Python相关问答推荐

仅对matplotlib的条标签中的一个条标签应用不同的格式

code _tkinter. Tcl错误:窗口路径名称错误.!按钮4"

如何终止带有队列的Python进程?+ 队列大小的错误?

如何计算列表列行之间的公共元素

将HLS纳入媒体包

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

Python在tuple上操作不会通过整个单词匹配

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

Pandas 有条件轮班操作

为什么这个带有List输入的简单numba函数这么慢

通过pandas向每个非空单元格添加子字符串

从嵌套的yaml创建一个嵌套字符串,后面跟着点

Python中的变量每次增加超过1

try 检索blob名称列表时出现错误填充错误""

如何杀死一个进程,我的Python可执行文件以sudo启动?

导入错误:无法导入名称';操作';

如果包含特定值,则筛选Groupby

Js的查询结果可以在PC Chrome上显示,但不能在Android Chrome、OPERA和EDGE上显示,而两者都可以在Firefox上运行

仅使用预先计算的排序获取排序元素

当HTTP 201响应包含 Big Data 的POST请求时,应该是什么?