我有一个pandas DataFrame,想生成一个等价矩阵(或者叫做其他名字),其中每个单元格的值为一个,如果 df.Col[i] == df.Col[j],则为一个值,如果不相等,则为另一个值。
以下代码可以实现:
以下代码可以实现:
df = pd.DataFrame({"Col":[1, 2, 3, 1, 2]}, index=["A","B","C","D","E"])
df
Col
A 1
B 2
C 3
D 1
E 2
sm = pd.DataFrame(columns=df.index, index=df.index)
for i in df.index:
for j in df.index:
if df.Col[i] == df.Col[j]:
sm.loc[i, j] = 3
else:
sm.loc[i, j] = -1
sm
A B C D E
A 3 -1 -1 3 -1
B -1 3 -1 -1 3
C -1 -1 3 -1 -1
D 3 -1 -1 3 -1
E -1 3 -1 -1 3
但一定有更好的方法。也许可以使用numpy?有什么想法吗?
[编辑]
使用piRsquared所写的内容,也许可以像这样?
m = df.values == df.values[:, 0]
sm = pd.DataFrame(None, df.index, df.index).where(m, 3).where(~m, -1)
这个能不能改进?