我有一个带有时间索引的 Dataframe 。每年八月开始有一个周期。我想计算每个月的值与前一个8月(其周期的开始)的值之间的差异。目的是了解每个周期中值的变化程度。
这是数据的一个小例子:
import pandas as pd
import numpy as np
df = pd.DataFrame({'date': ['2022-01-01 00:00:00', '2022-02-01 00:00:00',
'2021-03-01 00:00:00', '2021-04-01 00:00:00',
'2021-05-01 00:00:00', '2021-06-01 00:00:00',
'2021-07-01 00:00:00', '2021-08-01 00:00:00',
'2021-09-01 00:00:00', '2021-10-01 00:00:00',
'2021-11-01 00:00:00', '2021-12-01 00:00:00',
'2022-01-01 00:00:00', '2022-02-01 00:00:00',
'2022-03-01 00:00:00', '2022-04-01 00:00:00',
'2022-05-01 00:00:00', '2022-06-01 00:00:00',
'2022-07-01 00:00:00', '2022-08-01 00:00:00',
'2022-09-01 00:00:00', '2022-10-01 00:00:00',
'2022-11-01 00:00:00', '2023-12-01 00:00:00',
'2023-01-01 00:00:00', '2023-02-01 00:00:00',
'2023-03-01 00:00:00', '2023-04-01 00:00:00',
'2023-05-01 00:00:00', '2023-06-01 00:00:00',
],
'value1': [0.452762281,0.372262281,0.513928948,0.447762281,
0.377095615,0.355095615,0.271428948,0.291762281,
0.476762281,0.335928948,0.280428948,0.283762281,
0.322928948,0.287262281,0.316928948,0.209262281,
0.407928948,0.254262281,0.232095615,0.264262281,
0.076095615,-0.025237719,-0.042237719,-0.094904385,
0.017428948,-0.036071052,-0.094071052,-0.071404385,
0.008095615,-0.141571052],
'value2': [9.6,8,8.4,6.2,6.2,6,3.9,8.5,8.3,5.3,5.6,5.3,
6.2,6.3,6.9,4.8,6.7,3.6,3,4.6,2.3,1.3,1,0.3,
1.6,0.4,1.5,1.4,2.2,1.2]})
df = df.set_index('date')
我试图得到一个具有相同结构的dataframe,但所有的值都具有其对应的八月的值,然后我只需要从另一个dataframe中减去一个dataframe。但我也找不到办法。
谢谢,请多加关照.
2条答案
按热度按时间omqzjyyz1#
如果我理解正确的话,你可以使用
.groupby()
,然后计算每组的差异:图纸:
bxgwgixi2#
有几种方法可以解决您的问题。解决方案取决于您的数据可能的外观
你的代码中也有一些缺陷。这是我的建议
1.这里不需要
set_index('date')
。这里是:
第一行是将
date
列转换为datetime格式,第二行是按升序对数据进行排序。1.最常见的方法是使用august only提取子样本,然后将这些值合并回主 Dataframe 并执行计算。这可能会很长,但它会显示任何潜在的错误,如果有在您的数据
完整的解决方案: