我有一些看似......的数据。
Year Make Model Trim
2007 Acura TL Base
2010 Dodge Avenger SXT
2009 Dodge Caliber SXT
2008 Dodge Caliber SXT
2008 Dodge Avenger SXT
Trim
有一些缺失的值。我想做的事情如下:
例如,我会看看2007 Acura TL的所有内容。这可能看起来像
Year Make Model Trim
2007 Acura TL Base
2007 Acura TL XLR
2007 Acura TL NaN
2007 Acura TL Base
然后,我会用Base来归纳Nan(因为Base是模式)。重要的是要记住,我想为每一组Year,Make和Model做这个。
答案 0 :(得分:3)
使用模式
puts "Type ADD 'name' to add a name, DEL 'name' to delete, and EXIT to end program."
parser = CommandParser.new
while (parser.parse(gets.chomp))
puts "Names: #{NameRegistry.names.join(', ')}"
end
使用In [215]: df
Out[215]:
Year Make Model Trim
0 2007 Acura TL Base
1 2010 Dodge Avenger SXT
2 2009 Dodge Caliber NaN
3 2008 Dodge Caliber SXT
4 2008 Dodge Avenger SXT
In [216]: df.Trim.fillna(df.Trim.mode()[0])
Out[216]:
0 Base
1 SXT
2 SXT
3 SXT
4 SXT
Name: Trim, dtype: object
实际设置
inplace=True
如果您正在处理群组
In [217]: df.Trim.fillna(df.Trim.mode()[0], inplace=True)
In [218]: df
Out[218]:
Year Make Model Trim
0 2007 Acura TL Base
1 2010 Dodge Avenger SXT
2 2009 Dodge Caliber SXT
3 2008 Dodge Caliber SXT
4 2008 Dodge Avenger SXT
答案 1 :(得分:1)
使用groupby
然后mode
。请注意,mode
返回一个数组,并且您想要获取它的第一个元素。 @John Galt值得称赞并得到我的支持。
我使用assign
创建df
的副本,其中包含Trim
列的覆盖版本。
df.assign(
Trim=df.groupby(
['Year', 'Make', 'Model']
).Trim.apply(
lambda x: x.fillna(x.mode()[0])
)
)
Year Make Model Trim
0 2007 Acura TL Base
1 2007 Acura TL XLR
2 2007 Acura TL Base
3 2007 Acura TL Base
您可以使用
直接覆盖该列df['Trim'] = df.groupby(
['Year', 'Make', 'Model']
).Trim.apply(
lambda x: x.fillna(x.mode()[0])
)