【问题标题】:Is there a simple way to select a loop or cycle of data in pandas/Python?有没有一种简单的方法可以在 pandas/Python 中选择一个循环或循环数据?
【发布时间】:2020-11-03 00:24:12
【问题描述】:

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

这是一个示例 pandas DataFrame:

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.concatenate()np.arange() 结合使用来实现我的工作方式?正如我所提到的,我一直遇到这个问题,对于像 Python 这样方便的语言,它看起来确实是一个应该存在或应该存在的特性。我是否遗漏或忘记了什么?

编辑以澄清请求:

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

【问题讨论】:

    标签: python pandas numpy cyclic


    【解决方案1】:

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

    或者,如果你想通过索引来做到这一点,你可以使用mod division

    np.arange(5) % 4 == array([0, 1, 2, 3, 0])
    

    【讨论】:

    • np.tile 很接近,但仍需要额外的步骤将其截断为部分循环长度(这是我正在寻找的方法的直接性,但不允许部分重复)。第二种方法,适当概括,看起来像:np.arange(len(df)+n) % (len(df)),它与我当前使用的np.concatenate 方法直接可比(不过,我没有想到的解决方案的要点)。我将稍微修改我的问题以澄清请求。
    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 2012-07-24
    相关资源
    最近更新 更多