查找最接近 DataFrame 列平均值的行
Find a row closest to the mean of a DataFrame column
我正在 pandas 使用一个小数据集,但我被困在某个地方。
合并后的数据如下:
使用此数据,下面的代码给出了每个区域的最小面积,并在获得的 Dataframe 的同一行上完成相应的国家/地区名称。
Area_min=Africa.groupby('Region').Area.agg([min])
Area_min['Country']=(Africa.loc[Africa.groupby('Region').Area.idxmin(), 'Names']).values
Area_min
而这个给出了每个地区的最大人口数,并在获得的Dataframe中的同一行补上了相应的国家名称。
Pop_max=Africa.groupby('Region').Population.agg([max])
Pop_max['Country']=(Africa.loc[Africa.groupby('Region').Population.idxmax(), 'Names']).values
Pop_max
现在,我正在尝试获取每个地区的平均人口,并在获得的 Dataframe 的同一行上填写人口最接近相应组平均值的国家/地区的名称。
下面的代码给出了每个地区的平均人口,但我坚持与国家名称相对应。
Pop_average=Africa.groupby('Region').Population.agg(['mean'])
我正在考虑 .map() 和 .apply() 函数,但我尝试过但没有成功。任何提示都会有所帮助。
由于您只按一列分组,因此一次分组效率更高。
此外,由于您无论如何都在使用 idxmin
,执行第一个 groupby.agg
似乎是多余的,因为您可以直接访问列名。
g = Africa.groupby('Region')
Area_min = Africa.loc[g['Area'].idxmin(), ['Names', 'Area']]
Pop_max = Africa.loc[g['Population'].idxmax(), ['Names', 'Population']]
那么对于你的问题,这里有一种方法。对总体mean
进行变换,求均值与总体的差异,使用abs
+groupby
+idxmin
找到差异最小的位置;然后像上面那样使用 loc
访问器来获得所需的结果:
Pop_average = Africa.loc[((g['Population'].transform('mean') - Africa['Population']).abs()
.groupby(Africa['Region']).idxmin()),
['Names','Population']]
我正在 pandas 使用一个小数据集,但我被困在某个地方。
合并后的数据如下:
使用此数据,下面的代码给出了每个区域的最小面积,并在获得的 Dataframe 的同一行上完成相应的国家/地区名称。
Area_min=Africa.groupby('Region').Area.agg([min])
Area_min['Country']=(Africa.loc[Africa.groupby('Region').Area.idxmin(), 'Names']).values
Area_min
而这个给出了每个地区的最大人口数,并在获得的Dataframe中的同一行补上了相应的国家名称。
Pop_max=Africa.groupby('Region').Population.agg([max])
Pop_max['Country']=(Africa.loc[Africa.groupby('Region').Population.idxmax(), 'Names']).values
Pop_max
现在,我正在尝试获取每个地区的平均人口,并在获得的 Dataframe 的同一行上填写人口最接近相应组平均值的国家/地区的名称。
下面的代码给出了每个地区的平均人口,但我坚持与国家名称相对应。
Pop_average=Africa.groupby('Region').Population.agg(['mean'])
我正在考虑 .map() 和 .apply() 函数,但我尝试过但没有成功。任何提示都会有所帮助。
由于您只按一列分组,因此一次分组效率更高。
此外,由于您无论如何都在使用 idxmin
,执行第一个 groupby.agg
似乎是多余的,因为您可以直接访问列名。
g = Africa.groupby('Region')
Area_min = Africa.loc[g['Area'].idxmin(), ['Names', 'Area']]
Pop_max = Africa.loc[g['Population'].idxmax(), ['Names', 'Population']]
那么对于你的问题,这里有一种方法。对总体mean
进行变换,求均值与总体的差异,使用abs
+groupby
+idxmin
找到差异最小的位置;然后像上面那样使用 loc
访问器来获得所需的结果:
Pop_average = Africa.loc[((g['Population'].transform('mean') - Africa['Population']).abs()
.groupby(Africa['Region']).idxmin()),
['Names','Population']]