Как найти сумму словарей в панде DataFrame по всем строкам?

1

У меня есть DataFrame

df = pd.DataFrame({'keywords': [{'a': 3, 'b': 4, 'c': 5}, {'c':1, 'd':2}, {'a':5, 'c':21, 'd':4}, {'b':2, 'c':1, 'g':1, 'h':1, 'i':1}]})

Я хочу добавить все элементы во все строки, которые дали бы результат без использования iterrows:

a: 8
b: 6
c: 28
d: 6
g: 1
h: 1
i: 1

note: ни один элемент не встречается дважды в одной строке в исходном DataFrame.

Теги:
pandas
counter

2 ответа

1
Лучший ответ

Используя collections.Counter, вы можете sum итерабельность объектов Counter. Поскольку Counter является подклассом dict, вы можете pd.DataFrame.from_dict в pd.DataFrame.from_dict.

from collections import Counter

counts = sum(map(Counter, df['keywords']), Counter())
res = pd.DataFrame.from_dict(counts, orient='index')

print(res)

    0
a   8
b   6
c  28
d   6
g   1
h   1
i   1
  • 1
    Я думал, что могу сделать это с коллекциями, но не могу понять, как это сделать. Спасибо!
  • 0
    Есть ли более эффективный способ памяти сделать это? Мой массив данных огромен, и это занимает много времени.
Показать ещё 1 комментарий
1

Не уверен, как это сравнивается с точки зрения оптимизации с ответом @jpp, но я дам ему шанс.

# What we're starting out with
df = pd.DataFrame({'keywords': [{'a': 3, 'b': 4, 'c': 5}, {'c':1, 'd':2}, {'a':5, 'c':21, 'd':4}, {'b':2, 'c':1, 'g':1, 'h':1, 'i':1}]})

# Turns the array of dictionaries into a DataFrame
values_df = pd.DataFrame(df["keywords"].values.tolist())

# Sums up the individual keys
sums = {key:values_df[key].sum() for key in values_df.columns}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню