如何在 pandas 数据帧中的指定位置用 0 和 1 填充 NaN 值
How to fill NaN values with 0s and 1s at specified position in pandas dataframe
变量 V, A, X and O
有两个值,即 i
和 j
,形式为 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
变量 V, A, X and O
有两个值,即 i
和 j
,形式为 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