我希望你一切都好。
我需要帮助以对数据框执行复杂的“ NaN替换”。
根据其他列过滤的其他列值的模式,替换熊猫列中的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
我想用同一国家和地区的其他GDP值模式替换GDP列的nan值。
对于索引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
谢谢您的帮助,希望您过得愉快!
熊猫fillna
允许填充其他系列的缺失值。因此,我们需要另一个系列,其中包含每个国家/地区在相应索引处的模式。
要获得此系列,我们可以使用Pandas的groupby().transform()
操作。它对数据帧进行分组,然后将结果广播回原始形状。
如果我们mode
按原样使用此操作,则会出现错误。模式可以返回多个值,从而防止熊猫将值广播回原始形状。因此,我们需要强制其返回单个值,因此只需选择第一个(或最后一个,或任意一个)即可。
df["GDP"].fillna(
df.groupby(["Country", "Region"])["GDP"].transform(
lambda x: x.mode()[0]
)
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句