首页 > 解决方案 > 从数据框内容创建字典(主题作为键,嵌入作为值)

问题描述

包含以下内容的数据框

            0 1 2 3 4 5        
0 位评论者#0 -0.016271 0.011541 0.011903 -0.001355 0.008702
1 位评论者#1 -0.037961 0.033415 0.020643 0.004748 0.014523
2 位审稿人#2 -0.019863 0.019906 0.017248 0.006216 0.008826
3 位审稿人#3 -0.021029 0.016401 0.010772 0.001874 0.005772
4 位审稿人#4 -0.013409 0.011703 0.011249 0.000111 0.009319
5 位审稿人#5 -0.008549 0.007816 0.007859 0.000984 0.005491
6 位审稿人#6 -0.01634 0.017007 0.014637 0.005241 0.008135
7 位评论者#7 -0.017075 0.016119 0.013666 0.00314 0.008786
8 位审稿人#8 -0.030823 0.020217 0.012402 -0.003165 0.009643
9 位评论者#9 -0.038311 0.026252 0.017619 0.003568 0.003972
10 没收#0 -0.007147 0.007387 0.010867 0.000735 0.011244
11 没收#1 -0.016917 0.014412 0.016182 0.001859 0.015596
12 没收#2 -0.004854 0.004091 0.005075 -0.000566 0.00458
13 没收#3 -0.02642 0.021311 0.018871 -0.001843 0.017033
14 没收#4 -0.016161 0.013325 0.013113 -0.001036 0.011385
15 没收#5 -0.0131 0.0117 0.013829 -0.000861 0.01225
16 没收#6 -0.006454 0.005335 0.006634 -0.001038 0.006322
17 没收#7 -0.006855 0.005225 0.007626 -0.003071 0.009048
18 没收#8 -0.019227 0.015683 0.016805 -0.004709 0.019453
19 没收#9 -0.010685 0.011237 0.011653 0.003006 0.007464

现在我们想要一个字典如下

字典 = {
            0:{[审稿人#0 -0.016271 0.011541 0.011903 -0.001355 0.008702],[没收#0 -0.007147 0.007387 0.010867 0.000735 0.011244]}
            1:{[审稿人#1 -0.016271 0.011541 0.011903 -0.001355 0.008702],[没收#1 -0.007147 0.007387 0.010867 0.000735 0.011244]},
            .
            .
            .
            9:{[审稿人#9 -0.016271 0.011541 0.011903 -0.001355 0.008702],[没收#9 -0.007147 0.007387 0.010867 0.000735 0.011244]}
 }

提示:在数据框内容中,每一行代表每个单词的主题嵌入(我们有 10 个主题 #0 到 #9),例如评论者#0 到评论者#9,我们可以通过应用获取数据框中每一行的主题(0 到 9)流动的想法:

对于 dataframe.index 中的 inx:
 主题 = inx % 10

非常感谢您的想法和帮助

标签: pythondataframedictionary

解决方案


听起来这就是你所追求的:

import pandas as pd
from collections import defaultdict

df = pd.DataFrame([
    {0: 'reviewers#0', 1: 1.0, 2: 2.0, 3: 3.0},
    {0: 'reviewers#1', 1: 4.0, 2: 5.0, 3: 6.0},
    {0: 'confiscated#0', 1: 7.0, 2: 8.0, 3: 9.0},
    {0: 'confiscated#1', 1: 10.0, 2: 11.0, 3: 12.0},
])

print(df)

result = defaultdict(list)
for _, values in df.iterrows():
    values = list(values)
    result[int(values[0].split('#')[1])] += [values[1:]]
print(result)

结果:

               0     1     2     3
0    reviewers#0   1.0   2.0   3.0
1    reviewers#1   4.0   5.0   6.0
2  confiscated#0   7.0   8.0   9.0
3  confiscated#1  10.0  11.0  12.0
defaultdict(<class 'list'>, {0: [[1.0, 2.0, 3.0], [7.0, 8.0, 9.0]], 1: [[4.0, 5.0, 6.0], [10.0, 11.0, 12.0]]})

即数据框具有您描述的结构,result字典是您需要的结果吗?

如果您需要defaultdict成为一个普通的 dict,则可以进行一些小的更改,或者您可以强制转换它 - 但这不应该成为问题。


推荐阅读