gpt4 book ai didi

python - Pandas 使用 .where() 替换 .groupby() 对象

转载 作者:行者123 更新时间:2023-12-03 23:48:37 26 4
gpt4 key购买 nike

考虑一个包含几组整数的数据帧:

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 循环是一个很好的解决方案......

最佳答案

IIUC,您可以使用 cummax groupby喜欢:

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

关于python - Pandas 使用 .where() 替换 .groupby() 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60891163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com