如何在所有行的Pandas DataFrame中查找字典的总和?

时间:2018-10-17 12:44:15

标签: python pandas counter

我有一个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

注意:在原始DataFrame的单行中,没有任何元素出现两次。

2 个答案:

答案 0 :(得分:1)

使用collections.Counter,可以sumCounter对象的迭代对象。由于Counterdict的子类,因此您可以输入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 :(得分: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}