排除最新日期的熊猫

时间:2020-02-28 11:27:19

标签: python pandas

我有一个看起来像这样的df:

      Date          Value
 49     2018-11    6
 50     2018-12    8
 51     2018-12    2
 52     2018-12    5
 53     2018-12    2
 54     2018-12    14
 55     2019-01    8
 56     2019-01    20
 57     2019-01    5
 58     2019-02    2
 59     2019-02    5
 61     2019-02    14
 62     2019-02    2
 60     2019-02    12
 63     2019-02    8
 64     2019-02    1

我数据中的日期字段已转换为datetime。我想知道如何排除最长日期(例如“ 2019-02”)。我想比较Value(全部日期)的总和与Vale的总和减去最近一个月的数据之间的变化,以了解这种变化。

有没有一种方法可以在不特别注明日期的情况下(例如'2019-02')?例如,我尝试使用loc过滤出数据框上的最大日期,但一直出现错误,还尝试将索引设置为日期。

是否可以使用loc调出并过滤出最大日期?我问是因为我想创建一个月度报告,而不必每次都要刷新分析时都在代码中手动更改日期(例如``2019-02'')。

感谢您的帮助/建议。

亲切的问候

1 个答案:

答案 0 :(得分:1)

将列转换为日期时间,并用boolean indexing过滤最大日期时间的所有行,并用max值过滤不等于Series.ne的所有行:

d = pd.to_datetime(df['Date'], format='%Y-%m')

df = df[d.ne(d.max())]
print (df)
       Date  Value
49  2018-11      6
50  2018-12      8
51  2018-12      2
52  2018-12      5
53  2018-12      2
54  2018-12     14
55  2019-01      8
56  2019-01     20
57  2019-01      5

将列转换为datetime的解决方案:

df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m')

df = df[df['Date'].ne(df['Date'].max())]
print (df)
         Date  Value
49 2018-11-01      6
50 2018-12-01      8
51 2018-12-01      2
52 2018-12-01      5
53 2018-12-01      2
54 2018-12-01     14
55 2019-01-01      8
56 2019-01-01     20
57 2019-01-01      5
相关问题