Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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 具有多索引替换的Groupby_Python_Python 3.x_Pandas - Fatal编程技术网

Python 具有多索引替换的Groupby

Python 具有多索引替换的Groupby,python,python-3.x,pandas,Python,Python 3.x,Pandas,对于给定日期,我如何用美国值替换缺失的英国值?需要通用代码 df value country date uk 2016-01-01 NaN 2016-01-08 5.0 us 2016-01-01 21.0 2016-01-08 1.5 don't touch

对于给定日期,我如何用美国值替换缺失的英国值?需要通用代码

df
                              value
country        date         
uk            2016-01-01       NaN
              2016-01-08       5.0
us            2016-01-01       21.0
              2016-01-08       1.5
don't touch   2016-01-01       44.0
              2016-01-08       44.5
预期产量

                              value
country          date        
uk             2016-01-01       21.0     
               2016-01-08       5.0
us             2016-01-01       21.0
               2016-01-08       1.5
don't touch   2016-01-01        44.0
              2016-01-08        44.5

您可以按列表选择以避免删除
多索引
,并使用正确的对齐方式
重命名

df.loc[['uk']] = df.loc[['uk']].fillna(df.loc[['us']].rename({'us':'uk'}))
print (df)
                        value
country     date             
uk          2016-01-01   21.0
            2016-01-08    5.0
us          2016-01-01   21.0
            2016-01-08    1.5
don't touch 2016-01-01   44.0
            2016-01-08   44.5
或重塑为、替换为行和重塑为后:

df = df.unstack()
df.loc['uk'] = df.loc['uk'].fillna(df.loc['us'])
df = df.stack()

编辑:如果只想使用所有
NaN
s的解决方案,则测试其标量
True
False

print (df)
                       value
country     date            
uk          2016-01-01   NaN
            2016-01-08   NAN
us          2016-01-01  21.0
            2016-01-08   1.5
don't touch 2016-01-01  44.0
            2016-01-08  44.5

df = df.unstack()
print (df)
                 value           
date        2016-01-01 2016-01-08
country                          
don't touch       44.0       44.5
uk                 NaN        NAN
us                21.0        1.5


非常感谢@jezrael。如果我想保留multiindex,但仅当整个列为NaN(英国)时才替换值,您会添加掩码条件吗?@asd-添加到答案中。
print (df)
                       value
country     date            
uk          2016-01-01   NaN
            2016-01-08   NAN
us          2016-01-01  21.0
            2016-01-08   1.5
don't touch 2016-01-01  44.0
            2016-01-08  44.5

df = df.unstack()
print (df)
                 value           
date        2016-01-01 2016-01-08
country                          
don't touch       44.0       44.5
uk                 NaN        NAN
us                21.0        1.5
test = df.loc['uk'].isna().all()
print (test)
True

if test:
    df.loc['uk'] = df.loc['uk'].fillna(df.loc['us'])
df = df.stack(dropna=False)
print (df)
                        value
country     date             
don't touch 2016-01-01   44.0
            2016-01-08   44.5
uk          2016-01-01   21.0
            2016-01-08    1.5
us          2016-01-01   21.0
            2016-01-08    1.5