数据框中列之间公共值的热图
Heatmap of common values between columns in dataframe
我有一个 Pandas 数据框 df
有两列,A
和 B
这样 B
中的所有值对于一个值来说都是不同的在 A
中,但 A
中的两个不同值在 B
中可以有重复值。
A B
ABC1 XYZ XYZ 123
ABC2 XYZ XYZ 123
ABC1 XYZ XYZ 135
ABC3 XYZ PQR 123
ABC2 XYZ PQR 123
ABC3 XYZ XYZ 135
ABC4 XYZ XYZ 135
ABC2 XYZ PQR 987
ABC4 XYZ PQR 123
ABC5 PQR PQR 567
我如何从这个数据框创建一个热图,显示任意两个 A
值之间的公共 B
值的数量?我想我必须创建一个可能看起来像这样的枢轴 -
ABC1 ABC2 ABC3 ABC4 ABC5
ABC1 2 1 ...
ABC2 1 3
ABC3 0 1 ...
ABC4 0 0 ... ...
ABC5 0 0
关于如何高效完成此操作的任何帮助?
我认为我们可以为此使用 get_dummies
和 np.tensordot
。
首先,让我们找出 A
的每个值存在哪些 B
>>> common = pd.get_dummies(df['A']).groupby(df['B']).max()
>>> common
Bar Foo
B
2 1 0
3 0 1
4 0 1
5 1 1
6 1 0
9 1 0
然后要计算每行的交集,我们需要每对行的点积,为此我们可以使用:
>>> np.tensordot(common, common, (0, 0))
array([[4, 1],
[1, 3]], dtype=uint8)
>>> pd.DataFrame(np.tensordot(common, common, (0, 0)), columns=common.columns, index=common.columns)
Bar Foo
Bar 4 1
Foo 1 3
对角线显示每个 A
列的唯一 B
值的数量。
我有一个 Pandas 数据框 df
有两列,A
和 B
这样 B
中的所有值对于一个值来说都是不同的在 A
中,但 A
中的两个不同值在 B
中可以有重复值。
A B
ABC1 XYZ XYZ 123
ABC2 XYZ XYZ 123
ABC1 XYZ XYZ 135
ABC3 XYZ PQR 123
ABC2 XYZ PQR 123
ABC3 XYZ XYZ 135
ABC4 XYZ XYZ 135
ABC2 XYZ PQR 987
ABC4 XYZ PQR 123
ABC5 PQR PQR 567
我如何从这个数据框创建一个热图,显示任意两个 A
值之间的公共 B
值的数量?我想我必须创建一个可能看起来像这样的枢轴 -
ABC1 ABC2 ABC3 ABC4 ABC5
ABC1 2 1 ...
ABC2 1 3
ABC3 0 1 ...
ABC4 0 0 ... ...
ABC5 0 0
关于如何高效完成此操作的任何帮助?
我认为我们可以为此使用 get_dummies
和 np.tensordot
。
首先,让我们找出 A
的每个值存在哪些 B
>>> common = pd.get_dummies(df['A']).groupby(df['B']).max()
>>> common
Bar Foo
B
2 1 0
3 0 1
4 0 1
5 1 1
6 1 0
9 1 0
然后要计算每行的交集,我们需要每对行的点积,为此我们可以使用:
>>> np.tensordot(common, common, (0, 0))
array([[4, 1],
[1, 3]], dtype=uint8)
>>> pd.DataFrame(np.tensordot(common, common, (0, 0)), columns=common.columns, index=common.columns)
Bar Foo
Bar 4 1
Foo 1 3
对角线显示每个 A
列的唯一 B
值的数量。