使用.where()替换.groupby()对象的熊猫

时间:2020-03-27 17:29:28

标签: 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
    label   value
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 < s.shift()), s.shift())

适用于单个系列。我什至可以对数据框进行分组,并遍历每个提取的序列:

grouped = s.groupby('label')['value']
for _, s in grouped:
    print(s.where(~(s < s.shift()), s.shift()))
0    1.0
1    2.0
2    3.0
3    3.0
Name: value, dtype: float64
4    7.0
5    7.0
6    8.0
7    9.0
Name: value, dtype: float64

但是,现在如何将这些值恢复到原始数据框中?

或者,还有更好的方法吗?我不在乎使用.groupby,也不认为for循环是一个不错的解决方案...

1 个答案:

答案 0 :(得分:3)

IIUC,您可以在pom.xml中使用cummax,例如:

groupby