我在数据框中有以下格式的数据:
df=pd.DataFrame([
[42,{"tags":["illustration","logo","design","ui"]}],
[81,{"tags":["typography","icon","vector","ux"]}],
[98,{"tags":["branding","app"]}],
[52,{"tags":["animation","web","flat"]}],
[17,{"tags":["type","lettering"]}],
[37,{"tags":["illustration","typography","branding","typography","branding"]}],
[63,{"tags":["logo","icon","app","web","lettering"]}],
[47,{"tags":["ui","ux"]}],
[6,{"tags":["design","vector","icon","flat","lettering","branding","app"]}],
[53,{"tags":["ui","ux","lettering","branding","app","animation","web","flat"]}],
[64,{"tags":["branding","app","typography","branding"]}],
[89,{"tags":["typography","branding","ux","lettering","branding"]}]
],columns=["_id","tags"])
我想用特定数量的标签计算'id'的数量(这个数字的分布),所以对于上面的数据,它将是:
Number of posts Number of tags
3 2
1 3
3 4
3 5
1 7
如何处理此任务的给定格式的文本标签?
谢谢
答案 0 :(得分:1)
使用DataFrame
构造函数+ Counter
list
理解每个tags
的计数长度为list
s:
from collections import Counter
c = Counter([len(x['tags']) for x in df['tags']])
df = pd.DataFrame({'Number of posts':list(c.values()), ' Number of tags ': list(c.keys())})
print (df)
Number of posts Number of tags
0 3 4
1 3 2
2 1 3
3 3 5
4 1 7
5 1 8
或者将apply
与value_counts
:
df = (df['tags'].apply(lambda x: len(x['tags']))
.value_counts()
.rename_axis('Number of tags')
.reset_index(name='Number of posts')
[['Number of posts','Number of tags']])
print (df)
Number of posts Number of tags
0 3 5
1 3 4
2 3 2
3 1 8
4 1 7
5 1 3