Python 如何替换数据框中与索引对齐有关的值

Python 如何替换数据框中与索引对齐有关的值,python,replace,pandas,alignment,Python,Replace,Pandas,Alignment,我想用一些其他值替换数据帧中缺少的一些值,保持索引对齐。 例如,在以下数据帧中 import pandas as pd import numpy as np df = pd.DataFrame({'A':np.repeat(['a','b','c'],4), 'B':np.tile([1,2,3,4],3),'C':range(12),'D':range(12)}) df = df.iloc[:-1] df.set_index(['A','B'], inplace=True) df.loc['

我想用一些其他值替换数据帧中缺少的一些值,保持索引对齐。 例如,在以下数据帧中

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':np.repeat(['a','b','c'],4), 'B':np.tile([1,2,3,4],3),'C':range(12),'D':range(12)})
df = df.iloc[:-1]
df.set_index(['A','B'], inplace=True)
df.loc['b'] = np.nan
df

      C   D
A B        
a 1   0   0
  2   1   1
  3   2   2
  4   3   3
b 1 NaN NaN
  2 NaN NaN
  3 NaN NaN
  4 NaN NaN
c 1   8   8
  2   9   9
  3  10  10
我想用“c”行的相应索引替换与之匹配的“b”行缺少的值。 结果应该是这样的

      C   D
A B        
a 1   0   0
  2   1   1
  3   2   2
  4   3   3
b 1   8   8
  2   9   9
  3   10  10
  4 NaN NaN
c 1   8   8
  2   9   9
  3  10  10
您可以使用相关
c
行中的值字典,如下所示:

# you can of course use .loc
>>> df.ix['b'].fillna(value=df.ix['c'].to_dict(), inplace=True)
    C   D
B
1   8   8
2   9   9
3  10  10
4 NaN NaN
结果:

>>> df
      C   D
A B
a 1   0   0
  2   1   1
  3   2   2
  4   3   3
b 1   8   8
  2   9   9
  3  10  10
  4 NaN NaN
c 1   8   8
  2   9   9
  3  10  10
您可以使用相关
c
行中的值字典,如下所示:

# you can of course use .loc
>>> df.ix['b'].fillna(value=df.ix['c'].to_dict(), inplace=True)
    C   D
B
1   8   8
2   9   9
3  10  10
4 NaN NaN
结果:

>>> df
      C   D
A B
a 1   0   0
  2   1   1
  3   2   2
  4   3   3
b 1   8   8
  2   9   9
  3  10  10
  4 NaN NaN
c 1   8   8
  2   9   9
  3  10  10
您可以使用相关
c
行中的值字典,如下所示:

# you can of course use .loc
>>> df.ix['b'].fillna(value=df.ix['c'].to_dict(), inplace=True)
    C   D
B
1   8   8
2   9   9
3  10  10
4 NaN NaN
结果:

>>> df
      C   D
A B
a 1   0   0
  2   1   1
  3   2   2
  4   3   3
b 1   8   8
  2   9   9
  3  10  10
  4 NaN NaN
c 1   8   8
  2   9   9
  3  10  10
您可以使用相关
c
行中的值字典,如下所示:

# you can of course use .loc
>>> df.ix['b'].fillna(value=df.ix['c'].to_dict(), inplace=True)
    C   D
B
1   8   8
2   9   9
3  10  10
4 NaN NaN
结果:

>>> df
      C   D
A B
a 1   0   0
  2   1   1
  3   2   2
  4   3   3
b 1   8   8
  2   9   9
  3  10  10
  4 NaN NaN
c 1   8   8
  2   9   9
  3  10  10

这太棒了!但有一个问题。当dataframe有更多的列,并且我们只希望在选定的列上替换NAN时,此方法不起作用,因为子集dataframe会创建一个副本,而不是一个视图。那么,你建议做什么?@pauper,我马上会说过滤列的选择,然后在值上应用相同的选项。这太棒了!但有一个问题。当dataframe有更多的列,并且我们只希望在选定的列上替换NAN时,此方法不起作用,因为子集dataframe会创建一个副本,而不是一个视图。那么,你建议做什么?@pauper,我马上会说过滤列的选择,然后在值上应用相同的选项。这太棒了!但有一个问题。当dataframe有更多的列,并且我们只希望在选定的列上替换NAN时,此方法不起作用,因为子集dataframe会创建一个副本,而不是一个视图。那么,你建议做什么?@pauper,我马上会说过滤列的选择,然后在值上应用相同的选项。这太棒了!但有一个问题。当dataframe有更多的列,并且我们只希望在选定的列上替换NAN时,此方法不起作用,因为子集dataframe会创建一个副本,而不是一个视图。那么,你建议做什么?@pauper,我马上会说过滤列的选择,然后在值副本上应用相同的选择