我正在尝试获取列的频率分布,列是针对类标签的单词列表。
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
答案 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。