【问题标题】:Heatmap of common values between columns in dataframe数据框中列之间常见值的热图
【发布时间】:2021-11-20 21:42:28
【问题描述】:

我有一个 Pandas 数据框 df 有两列,AB 这样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

关于如何有效地完成此任务的任何帮助?

【问题讨论】:

  • A 有多少个值?
  • A 中大约有 15-20 个唯一值。

标签: python pandas matplotlib heatmap


【解决方案1】:

我认为我们可以为此使用get_dummiesnp.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 值的数量。

【讨论】:

  • 这就像一个魅力!非常感谢! :)
猜你喜欢
  • 2021-01-04
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
相关资源
最近更新 更多