Python 各组熊猫缺失值的插补 我如何才能对熊猫中的每个指标进行这样的国别插补?
我想计算每个组缺少的值Python 各组熊猫缺失值的插补 我如何才能对熊猫中的每个指标进行这样的国别插补?,python,pandas,group-by,missing-data,imputation,Python,Pandas,Group By,Missing Data,Imputation,我想计算每个组缺少的值 no-A-state应根据指示器RKPI获得np.min 任何ISO州都不应获得每个指标的np.平均值 对于缺少值的状态,我想用perindicatorKPImean进行插补。在这里,这意味着对塞尔维亚的缺失值进行插补 mydf=pd.DataFrame({'Country':['no-A-state','no-ISO-state','German','serbia','austria','German','serbia','austria','],'indicator
- no-A-state应根据指示器RKPI获得
np.min
- 任何ISO州都不应获得每个指标的
np.平均值
- 对于缺少值的状态,我想用per
mean进行插补。在这里,这意味着对塞尔维亚的缺失值进行插补 mydf=pd.DataFrame({'Country':['no-A-state','no-ISO-state','German','serbia','austria','German','serbia','austria','],'indicatorKPI':[np.nan,np.nan,'SP.DYN.LE00.IN','NY.GDP.MKTP.CD','SP.DYN.LE00.IN','NY.GDP.MKTP.CD','NY.MKTP.CD','SP.DYN.LE00.IN','SP.DYN.LE00.IN','value':[np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,0.9,0.7,np.0.0,np.0indicatorKPI
mydf = pd.DataFrame({'Country':['no-A-state','no-ISO-state', 'no-A-state','no-ISO-state',
'germany','serbia','serbia', 'austria',
'germany','serbia', 'austria',],
'indicatorKPI':['SP.DYN.LE00.IN','NY.GDP.MKTP.CD', 'SP.DYN.LE00.IN',
'SP.DYN.LE00.IN','NY.GDP.MKTP.CD','SP.DYN.LE00.IN','NY.GDP.MKTP.CD','NY.GDP.MKTP.CD', 'SP.DYN.LE00.IN','NY.GDP.MKTP.CD', 'SP.DYN.LE00.IN'],
'value':['MIN of all for this indicator', 'MEAN of all for this indicator','MIN of all for this indicator','MEAN of all for this indicator', 0.9,'MEAN of all for SP.DYN.LE00.IN indicator',0.7, 'MEAN of all for NY.GDP.MKTP.CD indicator',0.2, 0.3, 0.6]
})
根据您的新示例,以下内容对我有用:
In [185]:
mydf.loc[mydf['Country'] == 'no-A-state', 'value'] = mydf['value'].min()
mydf.loc[mydf['Country'] == 'no-ISO-state', 'value'] = mydf['value'].mean()
mydf.loc[mydf['value'].isnull(), 'value'] = mydf['indicatorKPI'].map(mydf.groupby('indicatorKPI')['value'].mean())
mydf
Out[185]:
Country indicatorKPI value
0 no-A-state SP.DYN.LE00.IN 0.200000
1 no-ISO-state NY.GDP.MKTP.CD 0.442857
2 no-A-state SP.DYN.LE00.IN 0.200000
3 no-ISO-state SP.DYN.LE00.IN 0.442857
4 germany NY.GDP.MKTP.CD 0.900000
5 serbia SP.DYN.LE00.IN 0.328571
6 serbia NY.GDP.MKTP.CD 0.700000
7 austria NY.GDP.MKTP.CD 0.585714
8 germany SP.DYN.LE00.IN 0.200000
9 serbia NY.GDP.MKTP.CD 0.300000
10 austria SP.DYN.LE00.IN 0.600000
基本上,这是为了填充每个条件的缺失值,因此我们为“无状态”国家设置了最小值,然后为“无ISO状态”国家设置了最小值。然后,我们根据“indicatorKPI”分组,计算各组的平均值,并使用执行查找的map
将各自国家的平均值再次分配给空值行
以下是细分的步骤:
In [187]:
mydf.groupby('indicatorKPI')['value'].mean()
Out[187]:
indicatorKPI
NY.GDP.MKTP.CD 0.633333
SP.DYN.LE00.IN 0.400000
Name: value, dtype: float64
In [188]:
mydf['indicatorKPI'].map(mydf.groupby('indicatorKPI')['value'].mean())
Out[188]:
0 0.400000
1 0.633333
2 0.400000
3 0.400000
4 0.633333
5 0.400000
6 0.633333
7 0.633333
8 0.400000
9 0.633333
10 0.400000
Name: indicatorKPI, dtype: float64
关于期望输出,这些计算是否相互独立?它们是否相互依赖?例如,如果您将第一个要求的值设置为最小值,那么在添加最小值
mydf.loc[mydf['Country']=='no-A-state','value']=mydf['value'].min()mydf.loc[mydf['Country']=='no-ISO-state','value']=mydf['value']之后,这会影响列的平均值。mean()mydf.loc[mydf['value'].isnull(),'value']=mydf['indicatorKPI'].map(mydf.groupby('indicatorKPI')['value'].mean())
有效,但可能不是您想要的,具体取决于我以前的comment@EdChum的确我只是建议先填写MIN,然后计算平均值afterwards@EdChum:mydf.loc[mydf['Country']='no-A-state'…
你会用一个循环覆盖所有的组吗?map
解决了这个问题,我的代码片段工作了吗?但是mydf['indicatorKPI'].map(mydf.groupby('indicatorKPI')有点奇怪['value'].mean())
在我真实的、更大的数据集上返回一个错误:传递的项目数错误:#7_numberOfGroubs,placement意味着767_numberofItems在没有出现的情况下不能发表评论,原则上这应该是可行的,尝试重新启动内核以防出现一些不可靠的临时情况。尽管如此,我仍然面临着no-a和no-ISO状态这两种特殊情况的问题如果我想使用.map(mydf.groupby('indicatorKPI')['value'].mean())
没有赋值->即使它返回一个大的值列表。2)与这些特殊情况下的示例代码不同,我没有用指示符kpi和最小/平均值填充它们,而是只填充插补值-->我只得到一个结果,而不是根据指示符的数量。对不起,我不明白您的意图要填充KPI列,您的问题中没有明确这一点。我不知道您如何用任意值填充这些列。请告诉我们。