【问题标题】:Drop zero values at the beginning of a time series in pandas在熊猫时间序列的开头删除零值
【发布时间】:2019-10-07 14:54:03
【问题描述】:

我正在使用 Python 3.6。我有这种带有 class 'pandas.core.frame.DataFrame' 的时间序列:

              value
 index
2019-01-01    0
2019-02-01    0
2019-03-01    1577
2019-04-01    1715
2019-05-01    1787
2019-06-01    0
2019-07-01    1787

我想删除前两行,但没有对应于 2019 年 6 月的那一行。 输出将是:

              value
 index
2019-03-01    1577
2019-04-01    1715
2019-05-01    1787
2019-06-01    0
2019-07-01    1787

我不能使用 iterrows(),因为我有一个时间序列 pandas 格式。

【问题讨论】:

    标签: python python-3.x pandas time-series


    【解决方案1】:

    如果你只需要删除这两行,你可以简单地做df.iloc[2:]

    对于通用解决方案,您可以使用cumprod

    df.loc[~df.value.eq(0).cumprod().astype(bool)]
    

               value
    2019-03-01   1577
    2019-04-01   1715
    2019-05-01   1787
    2019-06-01      0
    2019-07-01   1787
    

    详情:

    >>> df.value.eq(0).cumprod()
    
    2019-01-01    1
    2019-02-01    1
    2019-03-01    0
    2019-04-01    0
    2019-05-01    0
    2019-06-01    0
    2019-07-01    0
    

    @user3483203 建议的替代(可能更好)解决方案

    df.loc[df['value'].ne(0).idxmax():]
    

               value
    2019-03-01   1577
    2019-04-01   1715
    2019-05-01   1787
    2019-06-01      0
    2019-07-01   1787
    

    【讨论】:

    • @La_haine 你确定你正在运行我们发布的代码吗?看起来你正在做类似df.loc[something] 的事情,其中​​something 是一个数据框。但请注意,我们在上述答案中只通过了pd.Series
    • @La_haine DataFrame has no attribute 'value' 表示您的 df 没有名为 value 的列。但是在我们的示例中,它确实有一个名为value 的列。只需将df.value 更改为df.whatever_your_column_is_name
    • 如果你可以选择带有df.value的数据框,你怎么会得到AttributeError: 'DataFrame' object has no attribute 'value'.这个错误?不确定您使用的是哪个 pandas 版本,但请尝试使用 df['value']
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多