如何在 pandas 数据帧中的指定位置用 0 和 1 填充 NaN 值

How to fill NaN values with 0s and 1s at specified position in pandas dataframe

变量 V, A, X and O 有两个值,即 ij,形式为 0 和 1。

起初,我为每个变量使用i

         # i   j
V = 1    # 1   0
A = 0    # 0   1
X = 1    # 1   1
O = 0    # 0   0

数据框是这样的:

z = [[V, V, O, V, 1],    
     [V, O, A, 1],
     [X, V, 1],
     [O, 1],
     [1]]

z = pd.DataFrame(z)
zz = z.copy()
zz.index =   ['C1','C2','C3','C4','C5']
zz.columns = ['C5','C4','C3','C2','C1']

cols=z.columns.tolist()
cols.sort(reverse=True)
df=z[cols]
df.index = ['C1','C2','C3','C4','C5']
df.columns = ['C1','C2','C3','C4','C5']
df

     C1  C2  C3  C4  C5     # Here 'V','A','X','O' are replaced by their i values. 
C1   1   1   0   1   1
C2  NaN  1   0   0   1
C3  NaN NaN  1   1   1
C4  NaN NaN NaN  1   0
C5  NaN NaN NaN NaN  1

现在,我需要用它们各自的 j 值填充 NaN 值。 逻辑是这样的,如果 C1 行,C2 列有 i 值,那么 C2 行,C1 列必须用相应变量的 j 值填充 NaN。同样,我想对所有行和列使用此逻辑

我需要的输出:

    C1   C2  C3  C4  C5
C1   1   1   0   1   1
C2   0   1   0   0   1
C3   0   1   1   1   1
C4   0   0   0   1   0
C5   0   0   1   0   1

IIUC 使用:

         # i   j
V = 1    # 1   0
A = 0    # 0   1
X = 1    # 1   1
O = 0    # 0   1


z = [[V, V, O, V, 1],    
     [V, O, A, 1],
     [X, V, 1],
     [O, 1],
     [1]]

df1 = pd.DataFrame(z, index=['C1','C2','C3','C4','C5'], columns=['C5','C4','C3','C2','C1'])

         # i   j
V = 0    # 1   0
A = 1    # 0   1
X = 1    # 1   1
O = 1    # 0   1

z = [[V, V, O, V, 1],    
     [V, O, A, 1],
     [X, V, 1],
     [O, 1],
     [1]]

df2 = pd.DataFrame(z, columns=['C1','C2','C3','C4','C5'], index=['C5','C4','C3','C2','C1'])

df = df1.combine_first(df2).astype(int)
print (df)
    C1  C2  C3  C4  C5
C1   1   1   0   1   1
C2   1   1   0   0   1
C3   1   0   1   1   1
C4   0   1   1   1   0
C5   0   0   1   0   1