如何为维恩图准备 Pandas df

2023-12-13

我有一个 Pandas 数据框,如下所示:

+-----+-----------+
| ID  | VALUE     |
+-----+-----------+
| A   | Today     |
+-----+-----------+
| A   | Yesterday |
+-----+-----------+
| B   | Tomorrow  |
+-----+-----------+
| C   | Tomorrow  |
+-----+-----------+
| D   | Today     |
+-----+-----------+
| D   | Tomorrow  |
+-----+-----------+
| E   | Today     |
+-----+-----------+
| E   | Yesterday |
+-----+-----------+
| E   | Tomorrow  |
+-----+-----------+

我想获取每个 ID 的“重叠”计数,因为我想根据这些数据构建维恩图。

例如。在本例中,“今天”和“明天”中有 2 个 ID。 “今天”和“昨天”中也有 2 个 ID。

我该怎么做呢?我尝试过各种组合value_counts and group_by,但我没有运气想出一些聪明的东西。


您可以使用crosstab得到虚拟变量,然后通过矩阵乘积来查看共现情况:

s = pd.crosstab(df['ID'],df['VALUE'])

pair_intersection = s.T @ s
all_three = s.ne(0).all(1)

Then, pair_intersection好像:

VALUE      Today  Tomorrow  Yesterday
VALUE                                
Today          3         2          2
Tomorrow       2         4          1
Yesterday      2         1          2

然后可以使用以下方法提取两个重叠组的计数pair_intersection.at['Today', 'Tomorrow'].

all_three is

ID
A    False
B    False
C    False
D    False
E     True
dtype: bool

因此属于所有三组的实例数是sum(all_three)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为维恩图准备 Pandas df 的相关文章

随机推荐