首页 > 解决方案 > Pandas Dataframe 使用值作为标签

问题描述

我有这个数据框,它有很多行,每一行都有购买的物品的数量,然后是所有物品的名称,每列一个。如果项目数少于列数,则存在 NaN 值。

   Count  Column1  Column2  Column3  Column4
 0     1        a      NaN      NaN      NaN
 1     3        c        a        b      NaN
 2     2        e        b      NaN      NaN
 3     4        b        c        d        f

我需要一个数据框,其中包含项目的标签和值 True 或 False,取决于该行中是否存在项目。

   Count       a        b        c        d        e        f
 0     1    True    False    False    False    False    False
 1     3    True     True     True    False    False    False
 2     2   False     True    False    False     True    False
 3     4   False     True     True     True    False     True

我不知道我怎么能得到这个。

编辑:找到适合我的解决方案:

from mlxtend.preprocessing import TransactionEncoder

dataset =  df.drop('Count', axis=1).T.apply(lambda x: x.dropna().tolist()).tolist()
te = TransactionEncoder()
te_ary=te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_ary, columns=te.columns_)

标签: pythonpandas

解决方案


尝试使用set_index+stack重塑pd.get_dummies然后sumlevel=0:

pd.get_dummies(df.set_index('Count').stack()).sum(level=0).astype(bool).reset_index()
   Count      a      b      c      d      e      f
0      1   True  False  False  False  False  False
1      3   True   True   True  False  False  False
2      2  False   True  False  False   True  False
3      4  False   True   True   True  False   True

推荐阅读