我有一个 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(使用前将#替换为@)