我有一个数据框,其中有一列包含标签数组。我想知道每个标签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
答案 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