Create New Dictionary from Old Dictionary Pandas DataFrame 计算熵
Create New Dictionary from Old Dictionary Pandas DataFrame to calculate entropy
我开始接受 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 创建带有集群的新词典,就像我的第二个示例,然后将这些值转换成列表,就像我的第三个例如。
尚不清楚熵计算如何适合您指定的输入和输出,但这是获得所需输出的一种方法,使用 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
取每个列表的第一个元素,并添加一个space以便稍后拆分:
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'"]
我开始接受 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 创建带有集群的新词典,就像我的第二个示例,然后将这些值转换成列表,就像我的第三个例如。
尚不清楚熵计算如何适合您指定的输入和输出,但这是获得所需输出的一种方法,使用 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
取每个列表的第一个元素,并添加一个space以便稍后拆分:
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'"]