Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 各组熊猫缺失值的插补 我如何才能对熊猫中的每个指标进行这样的国别插补?_Python_Pandas_Group By_Missing Data_Imputation - Fatal编程技术网

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
    indicatorKPI
    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.0

编辑 所需的输出应类似于

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列,您的问题中没有明确这一点。我不知道您如何用任意值填充这些列。请告诉我们。