【发布时间】:2016-03-09 19:49:10
【问题描述】:
从以下数据框df开始:
df = pd.DataFrame({'node':[1,2,3,3,3,5,5],'lang':['it','en','ar','ar','es','uz','es']})
我正在尝试构建结构:
node langs lfreq
0 1 [it] [1]
1 2 [en] [1]
2 3 [ar, es] [2, 1]
3 5 [uz, es] [1, 1]
所以基本上通过列表将lang 元素和每个节点的频率分组到单行中。到目前为止我做了什么:
# Getting the unique langs / node
a = df.groupby('node')['lang'].unique().reset_index(name='langs')
# Getting the frequency of lang / node
b = df.groupby('node')['lang'].value_counts().reset_index(name='lfreq')
c = b.groupby('node')['lfreq'].unique().reset_index(name='lfreq')
然后在node上合并:
d = pd.merge(a,c,on='node')
经过这些操作,我得到的是:
node langs lfreq
0 1 [it] [1]
1 2 [en] [1]
2 3 [ar, es] [2, 1]
3 5 [uz, es] [1]
您可能注意到,最后一行只有一个[1] 出现两个[uz, es] 的频率,而不是预期的[1,1] 列表。有没有办法以更简洁的方式执行分析以获得所需的输出?
【问题讨论】: