集合分析:创建 pandas 系列,其中交叉点作为索引,值作为计数

set analysis: create pandas series with intersections as index and values as counts

我试了又试,一整天都在尝试让这项工作成功,这让我开始生气了! 我想要做的就是创建一个必要的 pandas 系列以输入到 upsetplot 中,详情如下:

https://pypi.org/project/upsetplot/

我不明白 generate_data 函数是如何操纵它的集合来制作一个系列的。我本以为有一种简单的方法可以通过调用 set() 来实现,但我似乎找不到它。

所以我转而开始直接操作我的数据帧,但我怀疑这些尝试被误导了。

所以我求助于下面提供一个简单的数据框,并祈祷有好心人能开导我。

import pandas as pd
from matplotlib import pyplot as plt
from upsetplot import generate_data, plot

df = pd.DataFrame({'john':[1,2,3,5,7,8],
              'jerry':[1,2,5,7,9,2],
              'josie':[2,2,3,2,5,6],
              'jean':[6,5,7,6,2,4]})

df = pd.DataFrame({'john':[True,False,True,False,True,False],
              'jerry':[True,True,False,True,False,True],
              'josie':[True,False,False,True,False,False],
              'jean':[True,False,False,True,False,False],
              'food':['apple','carrot','choc','bread','ham','nut']})

包主页中的示例

from upsetplot import generate_data
example = generate_data(aggregated=True)
example  # doctest: +NORMALIZE_WHITESPACE
set0   set1   set2
False  False  False      56
              True      283
       True   False    1279
              True     5882
True   False  False      24
              True       90
       True   False     429
              True     1957
Name: value, dtype: int64

GroupBy.size 聚合计数,所有列没有 food:

df = pd.DataFrame({'john':[True,False,True,False,True,False],
              'jerry':[True,True,False,True,False,True],
              'josie':[True,False,False,True,False,False],
              'jean':[True,False,False,True,False,False],
              'food':['apple','carrot','choc','bread','ham','nut']})

cols = df.columns.difference(['food']).tolist()
s = df.groupby(cols).size()
print (s)
jean   jerry  john   josie
False  False  True   False    2
       True   False  False    2
True   True   False  True     1
              True   True     1
dtype: int64