遍历 pandas 矩阵(以数据框的形式)并根据条件更改元素
Loop through a pandas matrix (in the form of a dataframe) and change elements based on conditions
我有一个 Pandas 矩阵形式的数据框,它表示行和列中的元素(人)之间的相似性分数。
| | A | B | C |
|------------|-----------|---- ------|----------|
| D | 0.4 | 0.1 | 0.1 |
| E | 0.2 | 0.1 | 0.4 |
| F | 0.9 | 0.4 | 0.3 |
| G | 0.4 | 0.2 | 0.6 |
| H | 0.3 | 0.1 | 0.7 |
此外,我有这些元素的位置标识符列表。
A - London
B - Sydney
C - Paris
D - Paris
E - Delhi
F - London
G - Melbourne
H - Mumbai
我想遍历矩阵,如果两个元素之间的位置相同,则使相似度得分等于 0。在此示例中,我想将 A 和 F 的交集 0.9 以及 D 和 C 的交集 0.1 分别替换为 0。
谢谢!
编辑:
我正在寻找的最终预期输出如下:
| | A | B | C |
|------------|-----------|---- ------|----------|
| D | 0.4 | 0.1 | 0.0 |
| E | 0.2 | 0.1 | 0.4 |
| F | 0.0 | 0.4 | 0.3 |
| G | 0.4 | 0.2 | 0.6 |
| H | 0.3 | 0.1 | 0.7 |
为匹配列名称与城市创建了字典。然后是 rename
索引和列并与 numpy 广播进行比较,最后传递掩码到 DataFrame.mask
:
d = {'A': 'London', 'B': 'Sydney', 'C': 'Paris', 'D': 'Paris',
'E': 'Delhi', 'F': 'London', 'G':'Melbourne','H':'Mumbai'}
df1 = df.rename(index=d, columns=d)
df = df.mask(df1.index.to_numpy()[:, None] == df1.columns.to_numpy(), 0)
print (df)
A B C
D 0.4 0.1 0.0
E 0.2 0.1 0.4
F 0.0 0.4 0.3
G 0.4 0.2 0.6
H 0.3 0.1 0.7
详情:
print (df1)
London Sydney Paris
Paris 0.4 0.1 0.1
Delhi 0.2 0.1 0.4
London 0.9 0.4 0.3
Melbourne 0.4 0.2 0.6
Mumbai 0.3 0.1 0.7
print (df1.index.to_numpy()[:, None] == df1.columns.to_numpy())
[[False False True]
[False False False]
[ True False False]
[False False False]
[False False False]]
我有一个 Pandas 矩阵形式的数据框,它表示行和列中的元素(人)之间的相似性分数。
| | A | B | C |
|------------|-----------|---- ------|----------|
| D | 0.4 | 0.1 | 0.1 |
| E | 0.2 | 0.1 | 0.4 |
| F | 0.9 | 0.4 | 0.3 |
| G | 0.4 | 0.2 | 0.6 |
| H | 0.3 | 0.1 | 0.7 |
此外,我有这些元素的位置标识符列表。
A - London
B - Sydney
C - Paris
D - Paris
E - Delhi
F - London
G - Melbourne
H - Mumbai
我想遍历矩阵,如果两个元素之间的位置相同,则使相似度得分等于 0。在此示例中,我想将 A 和 F 的交集 0.9 以及 D 和 C 的交集 0.1 分别替换为 0。
谢谢!
编辑:
我正在寻找的最终预期输出如下:
| | A | B | C |
|------------|-----------|---- ------|----------|
| D | 0.4 | 0.1 | 0.0 |
| E | 0.2 | 0.1 | 0.4 |
| F | 0.0 | 0.4 | 0.3 |
| G | 0.4 | 0.2 | 0.6 |
| H | 0.3 | 0.1 | 0.7 |
为匹配列名称与城市创建了字典。然后是 rename
索引和列并与 numpy 广播进行比较,最后传递掩码到 DataFrame.mask
:
d = {'A': 'London', 'B': 'Sydney', 'C': 'Paris', 'D': 'Paris',
'E': 'Delhi', 'F': 'London', 'G':'Melbourne','H':'Mumbai'}
df1 = df.rename(index=d, columns=d)
df = df.mask(df1.index.to_numpy()[:, None] == df1.columns.to_numpy(), 0)
print (df)
A B C
D 0.4 0.1 0.0
E 0.2 0.1 0.4
F 0.0 0.4 0.3
G 0.4 0.2 0.6
H 0.3 0.1 0.7
详情:
print (df1)
London Sydney Paris
Paris 0.4 0.1 0.1
Delhi 0.2 0.1 0.4
London 0.9 0.4 0.3
Melbourne 0.4 0.2 0.6
Mumbai 0.3 0.1 0.7
print (df1.index.to_numpy()[:, None] == df1.columns.to_numpy())
[[False False True]
[False False False]
[ True False False]
[False False False]
[False False False]]