按 python 中的日期和 ID 计算值的变化
Calculate change in value by Date and ID in python
我有一个包含三列的数据框:ID、日期(总是月末)和给定日期给定 ID 的值。这些值随时间变化并且对于 ID 是唯一的。如何计算给定 ID 从一个月到下个月的价值变化(百分比和绝对值)?
这是示例数据。我想要一个新列,它会显示对于 ID 1850,从 2007-12-01 到 2008-01-01 的变化是 .0004 等等,对于每个月每个月的每个 ID 变化。共有约 100k 行和约 1000 个不同的 ID
Date ID value_
2007-12-01 00:00:00 1850 -0.0496133979294919
2008-01-01 00:00:00 1850 -0.0500387131996307
2008-02-01 00:00:00 1850 -0.0492422215808407
2007-02-01 00:00:00 4022 -0.0195919625346613
2007-03-01 00:00:00 4022 -0.0194071594854936
2007-04-01 00:00:00 4022 -0.00949770507514844
2007-05-01 00:00:00 4022 -0.00611289851053481
2007-06-01 00:00:00 4022 -0.00966828278354329
2007-07-01 00:00:00 4022 -0.010420327834716
2007-08-01 00:00:00 4022 -0.00374361336176163
2007-09-01 00:00:00 4022 -0.0217189168574824
2007-10-01 00:00:00 4022 -0.0210927493134818
2007-11-01 00:00:00 4022 -0.0208540558170204
2007-12-01 00:00:00 4022 -0.0281891859572789
2008-01-01 00:00:00 4022 -0.0342401666700859
2008-02-01 00:00:00 4022 -0.0345209140419046
2007-12-01 00:00:00 51667 -0.00457253924855003
2008-01-01 00:00:00 51667 -0.00613436134423086
2008-02-01 00:00:00 51667 -0.011212483689408
```)
确保数据框按 ID 和日期排序。
按 ID 对值列使用 diff() 分组:
df['Date']= pd.to_datetime(df['Date'])
df = df.sort_values(['ID','Date'])
df['diff'] = df.groupby('ID')['value_'].diff().fillna(0)
我有一个包含三列的数据框:ID、日期(总是月末)和给定日期给定 ID 的值。这些值随时间变化并且对于 ID 是唯一的。如何计算给定 ID 从一个月到下个月的价值变化(百分比和绝对值)?
这是示例数据。我想要一个新列,它会显示对于 ID 1850,从 2007-12-01 到 2008-01-01 的变化是 .0004 等等,对于每个月每个月的每个 ID 变化。共有约 100k 行和约 1000 个不同的 ID
Date ID value_
2007-12-01 00:00:00 1850 -0.0496133979294919
2008-01-01 00:00:00 1850 -0.0500387131996307
2008-02-01 00:00:00 1850 -0.0492422215808407
2007-02-01 00:00:00 4022 -0.0195919625346613
2007-03-01 00:00:00 4022 -0.0194071594854936
2007-04-01 00:00:00 4022 -0.00949770507514844
2007-05-01 00:00:00 4022 -0.00611289851053481
2007-06-01 00:00:00 4022 -0.00966828278354329
2007-07-01 00:00:00 4022 -0.010420327834716
2007-08-01 00:00:00 4022 -0.00374361336176163
2007-09-01 00:00:00 4022 -0.0217189168574824
2007-10-01 00:00:00 4022 -0.0210927493134818
2007-11-01 00:00:00 4022 -0.0208540558170204
2007-12-01 00:00:00 4022 -0.0281891859572789
2008-01-01 00:00:00 4022 -0.0342401666700859
2008-02-01 00:00:00 4022 -0.0345209140419046
2007-12-01 00:00:00 51667 -0.00457253924855003
2008-01-01 00:00:00 51667 -0.00613436134423086
2008-02-01 00:00:00 51667 -0.011212483689408
```)
确保数据框按 ID 和日期排序。
按 ID 对值列使用 diff() 分组:
df['Date']= pd.to_datetime(df['Date'])
df = df.sort_values(['ID','Date'])
df['diff'] = df.groupby('ID')['value_'].diff().fillna(0)