Python 如何将文档按术语dataframe更改为记录出现单词的文档的dataframe

Python 如何将文档按术语dataframe更改为记录出现单词的文档的dataframe,python,pandas,Python,Pandas,我有一个 我想将数据帧更改为 你能告诉我如何使用pandas进行编码吗?pandas中是否有任何内置函数可用于编码 doc_term_frame=pd.DataFrame(data={'doc_id':[1,2,3,4],'words':[['w1','w2'],['w2','w3'],['w4','w5'],['w4','w6']]}).set_index('doc_id') desired_frame=pd.DataFrame(data={'word':['w1','w2','w3','

我有一个

我想将数据帧更改为

你能告诉我如何使用pandas进行编码吗?pandas中是否有任何内置函数可用于编码

doc_term_frame=pd.DataFrame(data={'doc_id':[1,2,3,4],'words':[['w1','w2'],['w2','w3'],['w4','w5'],['w4','w6']]}).set_index('doc_id')
desired_frame=pd.DataFrame(data={'word':['w1','w2','w3','w4','w5','w6'],'doc_ids':[[1],[1,2],[2],[3,4],[3],[4]]}).set_index('word')

您可以使用
DataFrame
构造函数来创建将
列表
转换为行,然后根据重塑形状,通过重置索引从索引创建列,
groupby
和创建列表。最后通过以下方式将
系列
转换为
数据帧


使用
pd.concat

w = pd.concat({k: pd.Series(v) for k, v in df.words.iteritems()})
pd.Series(
    w.index.get_level_values(0)
).groupby(w.values).apply(list).to_frame(name='doc_ids')

   doc_ids
w1     [1]
w2  [1, 2]
w3     [2]
w4  [3, 4]
w5     [3]
w6     [4]

谢谢,你的帖子就是我要找的,我不熟悉堆栈/取消堆栈功能,我想我需要更多的python实践。
w = pd.concat({k: pd.Series(v) for k, v in df.words.iteritems()})
pd.Series(
    w.index.get_level_values(0)
).groupby(w.values).apply(list).to_frame(name='doc_ids')

   doc_ids
w1     [1]
w2  [1, 2]
w3     [2]
w4  [3, 4]
w5     [3]
w6     [4]