当每行具有标签数组时,按标签汇总

时间:2018-10-11 15:31:04

标签: python pandas dataframe data-analysis

我有一个数据框,其中有一列包含标签数组。我想知道每个标签val(11),a(5),b(15),c的列d的总和(16)。在以下数据帧上实现此目标的最佳方法是什么?

df = pd.DataFrame(columns=["val", "tags"], \
                  data=[ [5,["a","b","c"]], [6,["a","d"]], [10,["c","d"]]])

有没有比这种伪代码更好的方法了?

acc = {}
for row in df:
  for tag in row.tags
    if tag in acc:
      acc[tag]+=row.val
    else
      acc[tag]=val

1 个答案:

答案 0 :(得分:2)

因此,首先使用repeat和dataframe构造函数展平列表列,然后执行groupby + sum

pd.DataFrame({'val':df.val.repeat(df.tags.str.len()),'tags':sum(df.tags,[])}).groupby('tags').sum()
Out[97]: 
      val
tags     
a      11
b       5
c      15
d      16