Python 将bi报文添加到数据帧

Python 将bi报文添加到数据帧,python,pandas,Python,Pandas,我有一个类似这样的bi-gram列表: [['a','b'],['e', ''f']] 现在,我想将这些bigram添加到数据帧中,其频率如下: b f a|1 0 e|0 1 我尝试使用以下代码执行此操作,但这会引发一个错误,因为索引还不存在。对于真正的大数据,有没有一种快速的方法可以做到这一点?(像20万个大字) 您可以从collections包中使用。注意,我将列表的内容更改为元组而不是列表。这是因为计数器键(如dict键)必须是可散列的 from collections i

我有一个类似这样的bi-gram列表:

[['a','b'],['e', ''f']]
现在,我想将这些bigram添加到数据帧中,其频率如下:

  b  f
a|1  0
e|0  1
我尝试使用以下代码执行此操作,但这会引发一个错误,因为索引还不存在。对于真正的大数据,有没有一种快速的方法可以做到这一点?(像20万个大字)

您可以从collections包中使用。注意,我将列表的内容更改为元组而不是列表。这是因为计数器键(如dict键)必须是可散列的

from collections import Counter

l = [('a','b'),('e', 'f')]
index, cols = zip(*l)
df = pd.DataFrame(0, index=index, columns=cols)
c = Counter(l)

for (i, c), count in c.items():
    df.loc[i, c] = count
以上是直觉。这可以封装在一行生成器表达式中,如下所示:

pd.Series(Counter((bg[i][0], bg[i][1]) for bg in bigrams for i in range(2))).unstack()
from collections import Counter

bigrams = [[['a','b'],['e', 'f']], [['a','b'],['e', 'g']]]
pairs = []
for bg in bigrams:
    pairs.append((bg[0][0], bg[0][1]))
    pairs.append((bg[1][0], bg[1][1]))
c = Counter(pairs)

>>> pd.Series(c).unstack()  # optional:  .fillna(0)
    b   f   g
a   2 NaN NaN
e NaN   1   1
pd.Series(Counter((bg[i][0], bg[i][1]) for bg in bigrams for i in range(2))).unstack()