在具有唯一 ID 的数据框上计算累积产品
Calculating cumulative product over a dataframe with unique id's
我想计算时间序列数据中每个日期和每个唯一 ID 的累积乘积。我的理解是 groupby
和 cumprod
需要一起使用。但是,我不确定确切的语法。
这是一些示例数据和想要的输出
data = {'date': ['2014-05-01','2014-05-01','2014-05-01','2014-05-01',
'2014-05-02','2014-05-02','2014-05-02','2014-05-02','2014-05-03',
'2014-05-03','2014-05-03', '2014-05-03'],'id':[1, 2, 3, 4, 1,
2, 3, 4, 1, 2, 3, 4],'obs': [1, 2, 3, 4, 4, 3, 2, 1, 1, 2, 3, 4]}
df = pd.DataFrame(data, columns = ['date', 'id','obs'])
df.index =df.date
del df['date']
df
id obs
date
2014-05-01 1 1
2014-05-01 2 2
2014-05-01 3 3
2014-05-01 4 4
2014-05-02 1 4
2014-05-02 2 3
2014-05-02 3 2
2014-05-02 4 1
2014-05-03 1 1
2014-05-03 2 2
2014-05-03 3 3
2014-05-03 4 4
根据列 obs 中的值创建名为 cumproduct 的新列
df
id obs cumproduct
date
2014-05-01 1 1 1
2014-05-01 2 2 2
2014-05-01 3 3 3
2014-05-01 4 4 4
2014-05-02 1 4 5
2014-05-02 2 3 5
2014-05-02 3 2 5
2014-05-02 4 1 5
2014-05-03 1 1 6
2014-05-03 2 2 7
2014-05-03 3 3 8
2014-05-03 4 4 9
任何帮助都会很棒 :)
import pandas as pd
data = {'date': ['2014-05-01', '2014-05-01', '2014-05-01', '2014-05-01',
'2014-05-02', '2014-05-02', '2014-05-02', '2014-05-03',
'2014-05-03', '2014-05-03'],
'id': [1, 2, 3, 4, 1, 2, 3, 4, 1, 2],
'obs': [1, 2, 3, 4, 5, 5, 5, 5, 6, 7]}
df = pd.DataFrame(data).set_index(['date', 'id']).sort_index(level='date')
df_cumprod = df.groupby('id').cumprod()
print(df_cumprod)
然后输出是:
obs
date id
2014-05-01 1 1
2 2
3 3
4 4
2014-05-02 1 5
2 10
3 15
2014-05-03 4 20
1 30
2 70
请注意,您提供的代码和数据在几个方面存在缺陷,请不要运行。
我想计算时间序列数据中每个日期和每个唯一 ID 的累积乘积。我的理解是 groupby
和 cumprod
需要一起使用。但是,我不确定确切的语法。
这是一些示例数据和想要的输出
data = {'date': ['2014-05-01','2014-05-01','2014-05-01','2014-05-01',
'2014-05-02','2014-05-02','2014-05-02','2014-05-02','2014-05-03',
'2014-05-03','2014-05-03', '2014-05-03'],'id':[1, 2, 3, 4, 1,
2, 3, 4, 1, 2, 3, 4],'obs': [1, 2, 3, 4, 4, 3, 2, 1, 1, 2, 3, 4]}
df = pd.DataFrame(data, columns = ['date', 'id','obs'])
df.index =df.date
del df['date']
df
id obs
date
2014-05-01 1 1
2014-05-01 2 2
2014-05-01 3 3
2014-05-01 4 4
2014-05-02 1 4
2014-05-02 2 3
2014-05-02 3 2
2014-05-02 4 1
2014-05-03 1 1
2014-05-03 2 2
2014-05-03 3 3
2014-05-03 4 4
根据列 obs 中的值创建名为 cumproduct 的新列
df
id obs cumproduct
date
2014-05-01 1 1 1
2014-05-01 2 2 2
2014-05-01 3 3 3
2014-05-01 4 4 4
2014-05-02 1 4 5
2014-05-02 2 3 5
2014-05-02 3 2 5
2014-05-02 4 1 5
2014-05-03 1 1 6
2014-05-03 2 2 7
2014-05-03 3 3 8
2014-05-03 4 4 9
任何帮助都会很棒 :)
import pandas as pd
data = {'date': ['2014-05-01', '2014-05-01', '2014-05-01', '2014-05-01',
'2014-05-02', '2014-05-02', '2014-05-02', '2014-05-03',
'2014-05-03', '2014-05-03'],
'id': [1, 2, 3, 4, 1, 2, 3, 4, 1, 2],
'obs': [1, 2, 3, 4, 5, 5, 5, 5, 6, 7]}
df = pd.DataFrame(data).set_index(['date', 'id']).sort_index(level='date')
df_cumprod = df.groupby('id').cumprod()
print(df_cumprod)
然后输出是:
obs
date id
2014-05-01 1 1
2 2
3 3
4 4
2014-05-02 1 5
2 10
3 15
2014-05-03 4 20
1 30
2 70
请注意,您提供的代码和数据在几个方面存在缺陷,请不要运行。