我正在使用结构如下的数据集:
import pandas as pd
dat = pd.DataFrame({'id': [1,1,1,2,3,4,5,5], 'period':[1,2,3,1,2,1,2,4], 'dsti':[0.1,0.2,0.5,0.2,0.3,0.3,0.4,0.2]})
>>>dat
id period dsti
0 1 1 0.1
1 1 2 0.2
2 1 3 0.5
3 2 1 0.2
4 3 2 0.3
5 4 1 0.3
6 5 2 0.4
7 5 4 0.2
我想按ndg
变量将此表分组,并删除所有只有一个条目的观察值。此外,对于每个客户,我需要计算期间之间的dsti
之差除以月数:dsti2 = (dsti_period_n - dsti_period_(n-1))/(period_n - period_(n-1))
。例如。对于5号客户,新变量应为(0.2-0.4)/(4-2)。
最终数据集应类似于:
id period dsti dsti2
0 1 1 0.1 0.1
1 1 2 0.2 0.3
2 5 2 0.4 -0.1
有什么想法如何进行这种令人费解的转换吗?
答案 0 :(得分:3)
使用:
#filter out unique rows by id
dat = dat[dat['id'].duplicated(keep=False)].copy()
#get difference per id
df = dat.groupby('id').diff(-1)
#division for new column, df is assigned to dat, because same index in both
dat['dsti2'] = df['dsti'].div(df['period'])
#remove missing rows by dsti2 column
dat = dat.dropna(subset=['dsti2'])
print (dat)
id period dsti dsti2
0 1 1 0.1 0.1
1 1 2 0.2 0.3
6 5 2 0.4 -0.1