【问题标题】:Create New Dictionary from Old Dictionary Pandas DataFrame to calculate entropy从旧字典 Pandas DataFrame 创建新字典以计算熵
【发布时间】:2017-11-13 01:11:25
【问题描述】:

我开始对 pandas 感到满意,但不确定如何解决这个问题。

我在 pandas 数据框中有一列字典,我正在尝试计算其熵。

字典中的每个键表示一个簇,值是同一簇中的单词。每行看起来像这样,字典中的元素数量不同。即,有些词典有两个簇,而有些则多达 10 个:

  {1: ["'stop'", "'avoid'", "'stifle'", "'not'", "'squelch'", "'contain'", "'cover'", "'suppress'"], 2: ["'hold'"], 3: ["'burke'"], 4: ["'hod'"]}

我想计算每一行的熵,但我希望每个集群中的值都被视为相同。例如,理想情况下,上面的示例基本上看起来像这样:

{1: ["'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'"], 2: ["'hold'"], 3: ["'burke'"], 4: ["'hod'"]}

最后,我希望从集群中提取每个值,然后将它们集中到一个看起来像这样的列表中,这样我就可以在上面运行我的熵公式:

["'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'hold'", "'burke'", "'hod'"]

我正在努力寻找一种方法来使用 pandas 或更基本的 python 来创建具有类似于我的第二个示例的集群的新字典,然后将这些值转换为类似于我的第三个示例的列表。

【问题讨论】:

  • 为什么第一本词典中1对应的列表变成了第二本词典中的全部"'stop'"

标签: python pandas dataframe scipy entropy


【解决方案1】:

目前尚不清楚熵计算如何适合您指定的输入和输出,但这是获得所需输出的一种方法,使用 Pandas 和基本 Python 的组合。

import pandas as pd

data = {1: ["'stop'", "'avoid'", "'stifle'", "'not'", "'squelch'", 
            "'contain'", "'cover'", "'suppress'"], 
        2: ["'hold'"], 
        3: ["'burke'"], 
        4: ["'hod'"]}
s = pd.Series(data)

s
1    ['stop', 'avoid', 'stifle', 'not', 'squelch', ...
2                                             ['hold']
3                                            ['burke']
4                                              ['hod']
dtype: object

取出每个列表的第一个元素,并添加一个空格以便稍后分割:

s2 = s.apply(lambda x: (x[0]+" ")*len(x))

s2
1    'stop' 'stop' 'stop' 'stop' 'stop' 'stop' 'sto...
2                                              'hold' 
3                                             'burke' 
4                                               'hod' 
dtype: object

现在将每一行中的每个元素拉出并组合成一个列表:

slist = []
for valset in s2:
    # strip the trailing space in each valset
    for val in valset.strip().split(" "):
        slist.extend([val])

slist
["'stop'", "'stop'", "'stop'",  "'stop'", "'stop'",  "'stop'",
 "'stop'", "'stop'",  "'hold'",  "'burke'", "'hod'"]

【讨论】:

    猜你喜欢
    • 2019-02-10
    • 2015-10-29
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2021-12-07
    • 2020-01-18
    相关资源
    最近更新 更多