我有一个数据帧如下:金额加总
country letter keywords amount
c y ['fruits', 'apples', "banana"] 700
c y ["music", "dance", "banana"] 150
c y ['loud', "dance", "apples"] 350
我想总结与每个关键词相关联的量。 注意:country
和letters
并不总是相同的,如上面所做的数据。此外,keywords
的列表大小不同。
我试过几种解决方案。我附上了我下面最快的一个。我也试着解决方案apply
和defaultdicts
...
keywords_list = []
for i in zip(*[df[c] for c in df.columns]):
data = list(i[0:2])
for k in i[2]:
row = [k] + data + [i[-1]]
keywords_list.append(row)
df_expanded = pd.DataFrame(keywords_list)
df_expanded.groupby(list(range(3)))[3].sum().reset_index()
目标
country letter keywords amount
0 c y apples 1050
1 c y banana 850
2 c y dance 500
3 c y fruits 700
4 c y loud 350
5 c y music 150
编辑:例如目标
在纠正错误数据
country = list("ccc")
letters = list("yyy")
keywords = [['fruits', 'apples', "banana"], ["music", "dance", "banana"], ['loud', "dance", "apples"]]
amount = [700, 150, 350]
df = pd.DataFrame({"country" : country, "keywords": keywords, "letter" : letters, "amount" : amount})
df = df[['country', 'letter', 'keywords', 'amount']]
是的,这个解决方案更好。但我认为我们可以改进它甚至更多一点:'df.join(pd.DataFrame(df.pop('keywords')。values.tolist())。stack()。reset_index(level = 1,drop = True).rename('keywords'))' – MaxU
@MaxU - 感谢您的改进。 'pop'很少用,但这里是个好主意;) – jezrael