我有这个人。数据帧:
region country Season stage statistic value ps ps_vals
alabama usa 2000 1 median 135.53 0 46.153846
alabama usa 2001 1 median 138.75 0 30.769231
alabama usa 2000 3 median 151 91.11 0
alabama usa 2001 3 median 148.125 46.666 8.333333
california usa 2000 1 median 83.7191 3.2258 100
california usa 2001 1 median 92.6332 6.4516 91.666667
california usa 2000 3 median 49.2137 0 66.666667
california usa 2001 3 median 108.029 58.0645 58.333333
我想创建一个新的数据框,其中包含ps_vals
之间的差异,其中L.H.S是stage
3的值,而R.H.D是stage
1的值。对于阿拉巴马州,2000年ps_vals
3的stage
值为0,而2000年的stage
为46.153846,因此差异。将是-46.153846
结果数据框应如下所示:
region country Season ps_vals
alabama usa 2000 -46.153846
alabama usa 2001 -22.435898
california usa 2000 -33.333333
california usa 2001 -33.333334
如何实现这一目标?我可以区分这样的连续行:df['dA'] = df['A'] - df['A'].shift(-1)
,但在这种情况下这不起作用,因为行可能不是连续的。
答案 0 :(得分:1)
自动将仅使用阶段1过滤的数据帧与阶段3值合并。然后计算现在对齐的ps_vals
数据之间的差异:
results = df[df.stage==1].merge(df[df.stage==3],
on=['region', 'country', 'Season'],
suffixes = ('_x', ''))
results.ps_vals -= results.ps_vals_x
results[['region', 'country', 'Season', 'ps_vals']]
Out[56]:
region country Season ps_vals
0 alabama usa 2000 -46.153846
1 alabama usa 2001 -22.435898
2 california usa 2000 -33.333333
3 california usa 2001 -33.333334