我有一个类似下面的pandas数据框,其中包含“ type”和“ val0”列。
type val0
0 0
0 0
0 0
1 1
1 3
0 0
0 0
0 0
0 0
1 3
0 0
列“类型”可以为0或1,并且val0仅对于类型== 1具有有趣的值。
我正在尝试创建两列val1和val2。它们的定义方式类似:
使用0作为val1和val2的默认值,我将获得上述数据帧的输出:
type val0 val1 val2
0 0 4 0
0 0 4 0
0 0 4 0
1 1 4 1
1 3 4 1
0 0 3 1
0 0 3 1
0 0 3 1
0 0 3 1
1 3 3 3
0 0 0 3
由于第4、5和10行的类型== 1,
什么是有效的方法?我的实际数据框有几百万行,我想创建许多类似val1和val2的列,它们使用类型1行的不同聚合。
使用shift-cumsum模式(python pandas-创建一个保持连续值连续计数的列)
grouper = df.groupby(df['type'].ne(df['type'].shift()).cumsum())
df['val1'] = grouper['val0'].transform(np.sum)
df['val2'] = grouper['val0'].transform(np.min)
df.loc[df['type'].eq(0), ['val1', 'val2']] = np.nan
df['val1'] = df['val1'].bfill().fillna(0)
df['val2'] = df['val2'].ffill().fillna(0)
>>> df
type val0 val1 val2
0 0 0 4.0 0.0
1 0 0 4.0 0.0
2 0 0 4.0 0.0
3 1 1 4.0 1.0
4 1 3 4.0 1.0
5 0 0 3.0 1.0
6 0 0 3.0 1.0
7 0 0 3.0 1.0
8 0 0 3.0 1.0
9 1 3 3.0 3.0
10 0 0 0.0 3.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句