gpt4 book ai didi

python - 使用前一个组行在数据帧组中分配值

转载 作者:行者123 更新时间:2023-12-04 07:42:12 25 4
gpt4 key购买 nike

考虑以下数据框:

A |  B |  C
_____________
a | 1 | 1
a | 5 | NaN
b | 3 | 1
b | 4 | NaN
c | 2 | 1
c | 2 | NaN
a | 1 | NaN
b | 3 | NaN
c | 4 | NaN

我的目标是根据一个规则更新列 C,该规则还包括每个组的前一行。
举个例子,如果 B 列的值小于前一个,则 C 的值应该为 0,否则保留前一个 C 的值。
所以这会给我以下内容:
A |  B |  C
_____________
a | 1 | 1
a | 5 | 1
b | 3 | 1
b | 4 | 1
c | 2 | 1
c | 2 | 1
a | 1 | 0
b | 3 | 0
c | 4 | 1


我正在考虑使用一种
df.groupby(A).apply(lambda x: x['C'].shift(1) if x['B'].shift(1) >= x['B'] else 0)
但显然这不起作用,因为 apply 无法访问前几行(我认为)
如果一切都失败了,我会从每个组构建单独的 DF 并单独修改它们,所以不要在结果中包含另一个组的行,但我相信必须有一个使用原始数据帧的更优雅的解决方案。
有什么建议?

最佳答案

试试:

import numpy as np
def fill(x):
x['C'] = x['C'].fillna(method='ffill')
x['C'] = np.where(x['B'].values <= x['B'].shift(1).values, 0, x['C'])
return x
df = df.groupby('A').apply(fill)
这里的想法是首先用之前的值填充 NAN 值,然后在满足条件的情况下用 0 替换该值。

关于python - 使用前一个组行在数据帧组中分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67401334/

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