gpt4 book ai didi

python - 基于多列条件替换 Pandas 中的 NaN

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

我希望你做得很好。
我需要帮助在我的数据帧上执行复杂的“NaN 替换”。
根据其他列过滤的其他列值的模式,替换 Pandas 列中的 NaN 值的最佳方法是什么?
让我来说明我的问题:

import random
import numpy as np
import pandas as pd
data = {'Region': [1,1,1,2,2,2,1,2,2,2,2,1,1,1,2,1], 'Country': ['a','a', 'a', 'a', 'a','a', 'a', 'a', 'b', 'b', 'b', 'b','b','b','b','b'], 'GDP' : [100,100,101,105,105,110,np.nan,np.nan,200,200,100,150,100,150,np.nan,np.nan]}
df = pd.DataFrame.from_dict(data)
df:
     Region Country GDP
0 1 a 100.0
1 1 a 100.0
2 1 a 101.0
3 2 a 105.0
4 2 a 105.0
5 2 a 110.0
6 1 a NaN
7 2 a NaN
8 2 b 200.0
9 2 b 200.0
10 2 b 100.0
11 1 b 150.0
12 1 b 100.0
13 1 b 150.0
14 2 b NaN
15 1 b NaN

I would like to replace the nan values of the GDP column with the mode of other GDP values for the same country and region.


对于索引 6 的 GDP 列的 NaN 值,我希望将其替换为 100(因为它是区域 1 和国家 a 的 GDP 值的模式)
所需的输出应如下所示:
    Region Country  GDP
0 1 a 100
1 1 a 100
2 1 a 101
3 2 a 105
4 2 a 105
5 2 a 110
6 1 a 100
7 2 a 105
8 2 b 200
9 2 b 200
10 2 b 100
11 1 b 150
12 1 b 100
13 1 b 150
14 2 b 200
15 1 b 150
感谢您的帮助,希望您有美好的一天!

最佳答案

Pandas 的fillna允许填充另一个系列的缺失值。因此,我们需要另一个系列,其中包含每个国家/地区在相应索引处的模式。
要得到这个系列,我们可以使用 Pandas 的 groupby().transform()手术。它将数据帧分组,然后将结果广播回原始形状。
如果我们将这个操作与 mode 一起使用照原样,它会出错。模式可以返回多个值,防止 Pandas 将值广播回原始形状。所以我们需要强制它返回一个值,所以只需选择第一个(或最后一个,或以任何一个)。

df["GDP"].fillna(
df.groupby(["Country", "Region"])["GDP"].transform(
lambda x: x.mode()[0]
)
)

关于python - 基于多列条件替换 Pandas 中的 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64953680/

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