агрегировать по тегам, когда каждая строка имеет массив тегов - PullRequest
0 голосов
/ 11 октября 2018

У меня есть датафрейм с колонкой, содержащей массив тегов.Я хотел бы знать сумму столбца val для каждого тега a (11), b (5), c (15), 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 голосов
/ 11 октября 2018

Итак, сначала выровняйте столбец списка, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...