gpt4 book ai didi

python - Pandas 使用第一个可用值的拆分填充 nan 值

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:22 24 4
gpt4 key购买 nike

我正在尝试将 DataFrame 中的 nan 值替换为第一个先前可用值跨所有以下 nan 值的拆分。

在下面的例子中:

import pandas as pd
df = [100, None, None, 40, None, 120]
df = pd.DataFrame(df)

我想得到:

[33.33, 33.33, 33.33, 20, 20, 120]

如果我能找到一种方法来计算列中每个值后面的 nan 值的数量,那么我就可以运行一些计算来实现拆分。

最佳答案

使用:

import pandas as pd
df = [100, None, None, 40, None, 120]
df = pd.DataFrame(df, columns=['a'])

s = df['a'].ffill() / df.groupby(df['a'].notna().cumsum())['a'].transform('size')
print (s)

0 33.333333
1 33.333333
2 33.333333
3 20.000000
4 20.000000
5 120.000000
Name: a, dtype: float64

详细信息:

您可以通过 ffill 将缺失值替换为之前的非 NaN 值:

print (df['a'].ffill())
0 100.0
1 100.0
2 100.0
3 40.0
4 40.0
5 120.0
Name: a, dtype: float64

然后用Series.notna比较并按 Series.cumsum 创建群组:

print (df['a'].notna().cumsum())
0 1
1 1
2 1
3 2
4 2
5 3
Name: a, dtype: int32

并使用 GroupBy.transform 获取与原始大小相同的每组计数:

print (df.groupby(df['a'].notna().cumsum())['a'].transform('size'))
0 3
1 3
2 3
3 2
4 2
5 1
Name: a, dtype: int64

关于python - Pandas 使用第一个可用值的拆分填充 nan 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56753303/

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