列表与另一列的频率分布

时间:2018-09-12 14:04:08

标签: python python-3.x python-2.7 pandas

我正在尝试获取列的频率分布,列是针对类标签的单词列表。

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

1 个答案:

答案 0 :(得分:0)

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

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

相关问题