df
:
0 1 2
0 0.0481948 0.1054251 0.1153076
1 0.0407258 0.0890868 0.0974378
2 0.0172071 0.0376403 0.0411687
etc.
我想删除数据框的x和y标题/值相等的所有值,因此,我的预期输出将是这样的:
0 1 2
0 NaN 0.1054251 0.1153076
1 0.0407258 NaN 0.0974378
2 0.0172071 0.0376403 NaN
etc.
如图所示,已删除/替换(0,0),(1,1),(2,2)等的值。
我想到了如下循环索引:
for (idx, row) in df.iterrows():
if (row.index) == ???
但不知道在哪里进行或者是否是正确的方法
答案 0 :(得分:4)
您可以设置对角线:
In [11]: df.iloc[[np.arange(len(df))] * 2] = np.nan
In [12]: df
Out[12]:
0 1 2
0 NaN 0.105425 0.115308
1 0.040726 NaN 0.097438
2 0.017207 0.037640 NaN
答案 1 :(得分:2)
iloc
,并且数组是方形的,并且所有内容都是相同的顺序。
我概括了这里的概念
考虑数据框df
df = pd.DataFrame(1, list('abcd'), list('xcya'))
df
x c y a
a 1 1 1 1
b 1 1 1 1
c 1 1 1 1
d 1 1 1 1
然后我们使用numpy广播和np.where
执行相同的花哨索引分配:
ij = np.where(df.index.values[:, None] == df.columns.values)
df.iloc[list(map(list, ij))] = 0
df
x c y a
a 1 1 1 0
b 1 1 1 1
c 1 0 1 1
d 1 1 1 1
答案 2 :(得分:0)
n是行数/列数
df.values[[np.arange(n)]*2] = np.nan
或
np.fill_diagonal(df.values, np.nan)