沿着 pandas 数据框中的列进行高效的跨步切片

Posted

技术标签:

【中文标题】沿着 pandas 数据框中的列进行高效的跨步切片【英文标题】:Efficient strided slicing along a column in a pandas dataframe 【发布时间】:2014-09-01 13:35:48 【问题描述】:

在 pandas 数据框列中,我想(有效地)在给定的增量偏移处按切片选择行。例如,

import numpy as np
import pandas as pd

k = pd.DataFrame(np.arange(9))

# Here I can only select 1 element per stride. Would like to select n elements
a = k[0::3]
b = k[1::3]

# Here a copy is made. Would prefer a view of the above.
b.combine_first(a)
Out[11]: 
   0
0  0
1  1
3  3
4  4
6  6
7  7

是否有一种有效的方法可以从增量偏移的列中选择切片?谢谢。

【问题讨论】:

您的最终目标到底是什么? 我认为 OP 想要一个切片中的间隔(行),例如 0..1、3..4、6..7(或 0..3、10..13、20 ..23 等) 这里是一个示例上下文:我有 3 个传感器,每个传感器有 10 个传感器读数(通常是 10 x 3 矩阵)。这些读数沿 (30 x 1) 列排列。我希望汇总每个传感器的前 2 个读数 【参考方案1】:

在纯熊猫中,在这种情况下,您可以使用k.groupby((k.index / 2) % 2)。发送到 groupy 的数据帧将按照您的建议跨步。如果您只想要数据框,k[(k.index / 2) % 2 == 0]。或者你用的方法没问题。

【讨论】:

m = b.values() n = m.reshape(3, -1, order='F') n[0:2, :] array([[0, 3, 6], [1, 4, 7]]) 这样的东西也可以吗? (效率方面;我认为 groupby 有时会复制数据) @user3662899 我将建议使用 numpy 转置(如果您实际上正在使用矩阵并出于某种原因将它们存储在数据帧中),但如果长度不是,它通常不会工作可以被你的步幅整除。如果您的索引缺少值,它也将不起作用。但如果你真的在使用矩阵,你应该使用 numpy。 最终从 values 属性中获得了一个 numpy 视图并以这种方式操作事物。然而,给出的答案是对事物进行分组的另一种方式。

以上是关于沿着 pandas 数据框中的列进行高效的跨步切片的主要内容,如果未能解决你的问题,请参考以下文章

如何检索 Pandas 数据框中的列数?

如何在 Pandas 数据框中的特定位置插入一列? (更改熊猫数据框中的列顺序)

按名称切片数据框的列[重复]

使用 pandas 连接两个数据框中的不同列(并附加相似的列)

对 pandas 数据框中的列使用 map()

像 Qlik 一样计算 pandas 数据框中的列中的唯一值?