沿着 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 数据框中的特定位置插入一列? (更改熊猫数据框中的列顺序)