Python 使用.where()替换.groupby()对象中的
考虑一个包含多组整数的数据帧:Python 使用.where()替换.groupby()对象中的,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,考虑一个包含多组整数的数据帧: d=pd.DataFrame({'label':['a','a','a','a','b','b','b','b'],'value':[1,2,3,2,7,1,8,9]}) D 标签值 0 a 1 1 a 2 2 a 3 3 a 2 4 b 7 5 b 1 6 b 8 7 b 9 对于这些整数组中的每一个,每个整数都必须大于或等于前一个整数。如果不是这种情况,则采用上一个整数的值。我用 s.where(~(s
d=pd.DataFrame({'label':['a','a','a','a','b','b','b','b'],'value':[1,2,3,2,7,1,8,9]})
D
标签值
0 a 1
1 a 2
2 a 3
3 a 2
4 b 7
5 b 1
6 b 8
7 b 9
对于这些整数组中的每一个,每个整数都必须大于或等于前一个整数。如果不是这种情况,则采用上一个整数的值。我用
s.where(~(s
对于单个系列来说效果很好。我甚至可以对数据帧进行分组,并循环遍历每个提取的序列:
grouped=s.groupby('label')['value']
对于分组中的uS:
打印(其中(~(s
但是,现在如何将这些值恢复到原始数据帧中
或者,有没有更好的方法?我不喜欢使用<代码> .GROPBB< <代码>,也不认为for循环是一个很好的解决方案…< P> IIUC,你可以在<代码> GROPBB< <代码>中使用如下:
d['val_max'] = d.groupby('label')['value'].cummax()
print (d)
label value val_max
0 a 1 1
1 a 2 2
2 a 3 3
3 a 2 3
4 b 7 7
5 b 1 7
6 b 8 8
7 b 9 9
如果第二组是7,1,2,8,9,你的输出会是7,7,7,8,9吗?好问题,预期输出会是
7,7,7,8,9
。我应该早点问的,为此我伤了脑筋cummax
就是我要找的@jorijnsmit有时为一个问题伤脑筋是件好事,你不会很快忘记解决方法;)
d['val_max'] = d.groupby('label')['value'].cummax()
print (d)
label value val_max
0 a 1 1
1 a 2 2
2 a 3 3
3 a 2 3
4 b 7 7
5 b 1 7
6 b 8 8
7 b 9 9