如何根据索引对齐替换 pandas DataFrame 中的值

How to replace values in pandas DataFrame respecting index 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['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 行中的 fillna with the values dictionary to_dict,如下所示:

# 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