【发布时间】:2021-03-31 18:57:27
【问题描述】:
假设我有一个格式如下的 df:
year 2016 2017 2018 2019 2020 min max avg
month
2021-01-01 284 288 311 383 476 284 476 357.4
2021-02-01 301 315 330 388 441 301 441 359.6
2021-03-01 303 331 341 400 475 303 475 375.4
2021-04-01 283 300 339 419 492 283 492 372.6
2021-05-01 287 288 346 420 445 287 445 359.7
2021-06-01 283 292 340 424 446 283 446 359.1
2021-07-01 294 296 360 444 452 294 452 370.3
2021-08-01 294 315 381 445 451 294 451 375.9
2021-09-01 288 331 405 464 459 288 464 385.6
2021-10-01 327 349 424 457 453 327 457 399.1
2021-11-01 316 351 413 469 471 316 471 401.0
2021-12-01 259 329 384 467 465 259 467 375.7
我想通过使用df['delta'] = df['2020'].diff()来获得2020年专栏的差异
这显然会为列中的第一个值返回 NaN。我怎样才能让它自动将该差异解释为 2020 年的第一个值和 2019 年的最后一个值之间的差异?
【问题讨论】:
-
您的
month索引实际上是“一月”、“二月”、“三月”、...(甚至是 1、2、3...),而不是特定年份2021-01-01.为什么不让月份索引不那么混乱? -
@scmi 这是由于图形滚动的代码错误,但我很想把这个问题弄清楚。月份指数通常是 Jan Feb Mar 等。
-
visualnotsobasic: 好的,但是对于所有关注这个的人来说,不要把你的索引命名为神秘和自相矛盾的东西。
-
我不会完全称其为神秘或自相矛盾的......它也与问题无关。我对建设性的批评没有意见,但你实际上只是在这里寻找错误。
-
visualnotsobasic:不,我不是,这是建设性的。在这里,索引
month=='2021-02-01'实际上仅表示 2016..2020 年间的Feb。有一个真正的建设性观点,那就是 “我们应该如何最好地表示仅月份(作为日期?整数 1..12?枚举?字符串?分类?),以便我们在聚合中获得正确的排序顺序/stacking/pivoting(/plotting,因为 matplotlib 可能不理解)" 这也是我一直在努力解决的问题。熊猫可能很笨重。分类仍然不是一流的类型,并且不能真正在导出/导入中幸存下来。 (相比之下,R 做得更好)