我有一个熊猫数据像下面的列"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列" type“可以是0或1,而val0只有== 1类型有有趣的值。
我正在尝试创建两个列val1和val2。它们以类似的方式定义:
的下一次出现的列。
使用0作为val1和val2的默认值,我将为上面的dataframe获得这个输出:
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,
。
什么是有效的方法来做到这一点?我实际的dataframe有几百万行,我想创建许多像val1和val2这样的列,它们使用不同类型的1行聚合。
发布于 2019-12-03 06:00:34
使用移位累积和模式(python pandas - creating a column which keeps a running count of consecutive values)
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.0https://stackoverflow.com/questions/59150793
复制相似问题