列表相对于另一列的频率分布

2024-04-19 12:30:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到列的频率分布,它是一个单词列表,与类标签相对应。你知道吗

Label                Numbers
0                    [(a,b,c)]
0                    [(d)]
0                    [(e,f,g)]
1                    [(a,z)]
1                    [(d,x,y)]

输出应为:

         0          1
a        1          1
b        1          0
c        1          0
d        1          1
e        1          0
f        1          0        
g        1          0
x        0          1
y        0          1
z        0          1

Tags: 列表标签单词label频率numbers
1条回答
网友
1楼 · 发布于 2024-04-19 12:30:34

'Numbers'列中的集合列表使得操作数据帧非常困难(这不是整齐的数据)。解决方案是扩展数据帧,这样在'Numbers'列中只有一个数字对应于'Label'列中的一个值。假设您的数据位于名为df的数据帧中,下面的代码将执行该操作:

rows_list = []

for index, row in df.iterrows():
    for element in row['Numbers'][0]:
        dict1 = {}
        dict1.update(key=row['Label'], value=element)
        rows_list.append(dict1)

new_df = pd.DataFrame(rows_list)
new_df.columns = ['Label', 'Numbers']

结果是

  Label Numbers
0     0     a
1     0     b
2     0     c
3     0     d
4     0     e
5     0     f
6     0     g
7     1     a
8     1     z
9     1     d
10    1     x
11    1     y    

现在是旋转的问题:

print(new_df.pivot_table(index='Numbers', columns='Label', aggfunc=len,
                         fill_value=0))

结果是

Label    0  1
Numbers      
a        1  1
b        1  0
c        1  0
d        1  1
e        1  0
f        1  0
g        1  0
x        0  1
y        0  1
z        0  1

最后一行代码请参见first answer here。你知道吗

相关问题 更多 >