1

我想在 Python 中选择一个数据循环(在本例中为 pandas,但它是一个灵活且反复出现的问题),以便所选数据围绕n个开始行的数据开始循环。我一直遇到这个问题,虽然我有多种可行的解决方案,但我对是否有一些我不知道的内置方法感兴趣?

这是一个示例熊猫数据框:

import pandas as pd
import numpy as np

df = pd.DataFrame([[0,1],[2,3],[5,6],[7,8]],columns = ['x','y'])

当然,这个 DataFrame 看起来像这样:

   x  y
0  0  1
1  2  3
2  5  6
3  7  8

我发现一个足够好的解决方案是创建一个索引数组:

n = 1     #how far through the start of the dataframe to select
select = np.concatenate((range(len(df)),range(n)))

的输出select将是:

array([0, 1, 2, 3, 0])

如果我这样做df.x[select],我会得到我正在寻找的东西:

0    0
1    2
2    5
3    7
0    0
Name: x, dtype: int64

NumPy、pandas 或任何其他 Python 模块中是否有一些功能可以允许这种循环选择数据?像df.x[0:+1]这样的东西会以类似于df.x[0:-1]而不是它目前的工作方式工作吗?或者一个 NumPy 方法,它通过将它与我的np.arange()工作方式相结合np.concatenate()?正如我所提到的,我一直遇到这个问题,对于像 Python 这样方便的语言,它确实看起来像是一个应该存在或应该存在的特性。我是否错过或忘记了什么?

编辑以澄清请求:

avloss建议的方法是使用np.tile,这是我正在寻找的正确程度的简单和可概括性,只是对于我正在使用的应用程序来说它是过度的。在这些情况下,您必须关闭循环数据循环以进行绘图或计算(例如,如果您使用有限差分方法匹配闭合曲线的起点和终点的斜率)。在这些情况下,您只需要重复序列中的前n 个数据点(其中n通常介于 1 和 3 之间)以结束计算或绘制循环。

4

1 回答 1

0

这不完全是您所要求的,但np.tile非常接近: https ://numpy.org/doc/stable/reference/generated/numpy.tile.html

或者,如果您想通过索引执行此操作,您可以使用mod division

np.arange(5) % 4 == array([0, 1, 2, 3, 0])
于 2020-07-13T19:30:50.523 回答