gpt4 book ai didi

python - 使用第二列的百分比变化填充列中的空值,同时按第三列分组

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

我有一个看起来像这样的数据框:

grp    val    run
a 5 10
b 10 1
a NaN 8
a NaN 4
b NaN 5
b NaN 4
a 10 6
a NaN 6
我想填补 val中的空白通过应用与计算相同的百分比变化来列。但是我还需要使用 grp 进行分组柱子。我应该得到这样的结果:
grp    val    run
a 5 10
b 10 1
a 4 8
a 2 4
b 50 5
b 40 4
a 10 6
a 10 6
我只想替换为空的值。注意第 7 行中的 10“重置”正向填充。
无需分组,我可以简单地获得 run 中的百分比变化。并乘以前一行的 val单元格按当前行的百分比变化单元格 val不为空。
我在想我可以使用 grp 订购数据框,但是我仍然需要担心何时 grp 的边缘情况值发生变化。

最佳答案

让我们试试:

# identify the na blocks and group by `grp` and these blocks
na_blocks = df['val'].notna().groupby(df['grp']).cumsum()
g = df.groupby(['grp', na_blocks])

# "pct change" on run
df['x'] = df['run'] / g['run'].shift(fill_value=1)

# cumprod() for cumulative change
# `ffill` and `transform('first')` behave the same
# since we are grouping on non-nan following by consecutive nan's
df['val'] = g['val'].ffill() * g['x'].cumprod() / g['run'].transform('first')
输出( x 可以删除的额外列):
  grp   val  run     x
0 a 5.0 10 10.0
1 b 10.0 1 1.0
2 a 4.0 8 0.8
3 a 2.0 4 0.5
4 b 50.0 5 5.0
5 b 40.0 4 0.8
6 a 10.0 6 6.0
7 a 10.0 6 1.0

关于python - 使用第二列的百分比变化填充列中的空值,同时按第三列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65515347/

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