二进制表中的元组列表?

Adr*_*tes 8 python list dataframe data-structures pandas

我有一个Python中具有不同数量或元素的事务/元组列表,如下所示:

lst = [('apple','banana','carrots'),('apple',),('banana','carrots',)]
Run Code Online (Sandbox Code Playgroud)

我想以表格形式(最好是a pd.DataFrame)存储此列表,例如:

   apple  banana  carrots
0      1       1        1
1      1       0        0
2      0       1        1
Run Code Online (Sandbox Code Playgroud)

但如果尝试直接使用转换pd.DataFrame,我得到他的代替:

pd.DataFrame(lst)
Run Code Online (Sandbox Code Playgroud)
        0        1        2
0   apple   banana  carrots
1   apple     None     None
2  banana  carrots     None
Run Code Online (Sandbox Code Playgroud)

如何将此类型的列表转换为二进制表?

Flo*_*oor 10

如果你使用value_counts列,即非常简单

pd.DataFrame(lst).apply(pd.value_counts,1).fillna(0)

    apple  banana  carrots
0    1.0     1.0      1.0
1    1.0     0.0      0.0
2    0.0     1.0      1.0
Run Code Online (Sandbox Code Playgroud)


Rob*_*bie 7

以下方法:

  1. 定义lst

  2. lst中查找所有唯一字符串

  3. 计算列表中每个元组的出现次数

  4. 创建数据框

在这里实施:

import pandas as pd
import numpy as np

lst = [('apple','banana','carrots'),('apple',),('banana','carrots',)]
cols = np.unique(sum(tuple(lst),()))
data = [[i.count(j) for j in cols] for i in lst]
df = pd.DataFrame(columns=cols, data=data)
Run Code Online (Sandbox Code Playgroud)

输出:

   apple  banana  carrots
0      1       1        1
1      1       0        0
2      0       1        1
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 7

我们试试get_dummies + groupby+ sum-

pd.get_dummies(pd.DataFrame(lst)).groupby(by=lambda x: x.split('_')[1], axis=1).sum()

   apple  banana  carrots
0      1       1        1
1      1       0        0
2      0       1        1
Run Code Online (Sandbox Code Playgroud)

这应该很快.