【问题标题】:Efficient strided slicing along a column in a pandas dataframe沿着 pandas 数据框中的列进行高效的跨步切片
【发布时间】: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 个读数

标签: python numpy pandas indexing slice


【解决方案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 视图并以这种方式操作事物。然而,给出的答案是对事物进行分组的另一种方式。
猜你喜欢
  • 2018-06-15
  • 1970-01-01
  • 2019-11-27
  • 2021-09-12
  • 2013-09-17
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2012-08-14
相关资源
最近更新 更多