Python 如何在所有行的数据框中查找字典的总和?
我有一个数据帧Python 如何在所有行的数据框中查找字典的总和?,python,pandas,counter,Python,Pandas,Counter,我有一个数据帧 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 注意:在原始数据帧的一行中,没有元素出现两次。使用,
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
注意:在原始数据帧的一行中,没有元素出现两次。使用,您可以对计数器
对象的一个iterable进行求和。由于Counter
是dict
的一个子类,因此您可以馈送到
不确定这在优化方面与@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}
我想我可以用收藏品来做,但不知道怎么做。谢谢有没有一种更节省内存的方法?我的数据帧很大,需要很长时间。@Panaceanob,我已经更新到map(计数器,df['keywords'))
。从这里看不出有什么改进。您已经选择了一个内存效率非常低的起点(在数据帧中保存字典)。不建议这样做sum
+map
是懒惰的,内存不是瓶颈,也不是它花费很长时间的原因。
# 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}