大熊猫中每组的数据处理

时间:2019-09-09 13:16:23

标签: python pandas dataframe pandas-groupby

我正在使用结构如下的数据集:

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

有什么想法如何进行这种令人费解的转换吗?

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