【问题标题】:if value is less than prior value in a pandas dataframe series如果值小于熊猫数据框系列中的先前值
【发布时间】:2018-06-21 18:25:33
【问题描述】:

这是我从日期中提取日期后的数据框的样子(见最后一列):

        Date       AAPL      NFLX       INTC  day
0 2008-01-02  27.834286  3.764286  25.350000    2
1 2008-01-03  27.847143  3.724286  24.670000    3
2 2008-01-04  25.721428  3.515714  22.670000    4
3 2008-01-07  25.377142  3.554286  22.879999    7
4 2008-01-08  24.464285  3.328571  22.260000    8

对于我的下一步,如果当前日期

到目前为止,我已经尝试了以下方法,但没有成功(我是菜鸟,刚开始使用 python)

for i, row in df.iterrows():
        if df.day.iloc[i+1] < df.day.iloc[i]:
            print (df['day'])

df.assign(Month_End = df.day.diff() < 0)
print(df.head())

【问题讨论】:

  • 您想在您的数据中找到真正的月末,还是只查找该月的最后一天?
  • 其实,现在想起来,我的数据里是一个月的最后一天
  • 所以月末解决方案不起作用。它错误地排除了我的 csv 文件中的某些日期,这些日期是最后一个交易日与月底不一致的月份......有其他解决方案的想法吗?我想过做 df.day

标签: python pandas dataframe compare diff


【解决方案1】:

您可以直接将日期与MonthEnd进行比较,看看是不是True

from pandas import offsets
df['Month_End'] = df.Date == df.Date+offsets.MonthEnd(0)

例子:

df:

        Date       AAPL      NFLX       INTC  day
0 2008-01-02  27.834286  3.764286  25.350000    2
1 2008-01-03  27.847143  3.724286  24.670000    3
2 2008-01-04  25.721428  3.515714  22.670000    4
3 2008-01-07  25.377142  3.554286  22.879999    7
4 2008-01-08  24.464285  3.328571  22.260000    8
5 2008-01-31  24.464285  3.328571  22.260000   31
6 2008-02-28  24.464285  3.328571  22.260000   28
7 2008-02-29  24.464285  3.328571  22.260000   29
8 2009-02-28  24.464285  3.328571  22.260000   28

from pandas import offsets
df.Date == df.Date + offsets.MonthEnd(0)

0    False
1    False
2    False
3    False
4    False
5     True
6    False
7     True
8     True
Name: Date, dtype: bool

【讨论】:

    【解决方案2】:

    你可以这样做:

    from pandas.tseries.offsets import MonthEnd
    df['Month_End'] = np.where(pd.to_datetime(df['Date'])== pd.to_datetime(df['Date']) + MonthEnd(0),  True, False)
    

    输出:

            Date       AAPL      NFLX       INTC  day  Month_End
    0 2008-01-02  27.834286  3.764286  25.350000    2      False
    1 2008-01-03  27.847143  3.724286  24.670000    3      False
    2 2008-01-04  25.721428  3.515714  22.670000    4      False
    3 2008-01-07  25.377142  3.554286  22.879999    7      False
    4 2008-01-31  24.464285  3.328571  22.260000    8       True
    

    【讨论】:

    • 这很漂亮....来自 C++ 背景 我只能对这个高效的代码感到满意。疯狂的蟒蛇和熊猫是多么强大......非常感谢乔
    • @EksanaStasis 欢迎您。我完全同意,很多内置功能。记得在有用的时候用靠近投票的勾来接受答案:)
    猜你喜欢
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 2016-12-17
    • 2022-06-15
    • 2019-02-22
    相关资源
    最近更新 更多