gpt4 book ai didi

python - 使用 groupby 填充 Pandas

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

我正在尝试使用具有相似列值的行来估算/填充值。

例如,我有这个数据框:

one | two | three
1 1 10
1 1 nan
1 1 nan
1 2 nan
1 2 20
1 2 nan
1 3 nan
1 3 nan

我想使用列 onetwo 的键,它们是相似的,如果列 third 不完全是 nan,则估算现有的来自一行相似键的值,其值位于“3”列中。

这是我想要的结果:

one | two | three
1 1 10
1 1 10
1 1 10
1 2 20
1 2 20
1 2 20
1 3 nan
1 3 nan

您可以看到键 1 和 3 不包含任何值,因为现有值不存在。

我尝试过使用groupby+fillna():

df['three'] = df.groupby(['one','two'])['three'].fillna()

这给了我一个错误。

我尝试过向前填充,这给了我相当奇怪的结果,它向前填充了第 2 列。我正在使用此代码进行前向填充。

df['three'] = df.groupby(['one','two'], sort=False)['three'].ffill()

最佳答案

如果每组只有一个非 NaN 值,则每组使用 ffill(前向填充)和 bfill(后向​​填充),因此需要 applylambda:

df['three'] = df.groupby(['one','two'], sort=False)['three']
.apply(lambda x: x.ffill().bfill())
print (df)
one two three
0 1 1 10.0
1 1 1 10.0
2 1 1 10.0
3 1 2 20.0
4 1 2 20.0
5 1 2 20.0
6 1 3 NaN
7 1 3 NaN

但是,如果每个组有多个值,并且需要用某个常量替换 NaN - 例如按组表示:

print (df)
one two three
0 1 1 10.0
1 1 1 40.0
2 1 1 NaN
3 1 2 NaN
4 1 2 20.0
5 1 2 NaN
6 1 3 NaN
7 1 3 NaN

df['three'] = df.groupby(['one','two'], sort=False)['three']
.apply(lambda x: x.fillna(x.mean()))
print (df)
one two three
0 1 1 10.0
1 1 1 40.0
2 1 1 25.0
3 1 2 20.0
4 1 2 20.0
5 1 2 20.0
6 1 3 NaN
7 1 3 NaN

关于python - 使用 groupby 填充 Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53701075/

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