我有一个 Pandas 数据框,如果索引和列名称相同,希望将值更改为 NA。有没有一种优雅的方法来实现这一目标?我只能想到一个带有 apply 和 function 的繁琐解决方案。
import pandas as pd
df = pd.DataFrame({'a': [1, 1], 'b': [1, 1], 'c': [1, 1]})
df.index = ['a', 'b']
df
+---+---+---+---+
| | a | b | c |
+---+---+---+---+
| a | 1 | 1 | 1 |
| b | 1 | 1 | 1 |
+---+---+---+---+
至
+---+-----+-----+---+
| | a | b | c |
+---+-----+-----+---+
| a |None | 1 | 1 |
| b | 1 |None | 1 |
+---+-----+-----+---+
最佳答案
你可以下降到 numpy 级别:
In [32]: df.where(df.index.values[:,None] != df.columns.values)
Out[32]:
a b c
a NaN 1.0 1
b 1.0 NaN 1
这是有效的,因为我们可以利用广播来创建一个数组,其中索引!=列:
In [33]: df.index.values[:,None] != df.columns.values
Out[33]:
array([[False, True, True],
[ True, False, True]], dtype=bool)
关于python - Pandas:如果索引和列相同,则将值更改为 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43671124/