当两行的值不同时,如何合并/组合系列中两行的值?

时间:2017-10-25 18:28:42

标签: python pandas slice series

我有一个Pandas系列,其中包含一个Index列和第二列,0。

索引列包含几种语言缩写。此索引列中的两个不同值是“en”代表“英语”,“en-gb”代表“英国英语”。此列中还有许多其他值,包括“es”表示“西班牙语”,“fr”表示“法语”,等等。

所以系列看起来像这样:

Index      0

en         42000
en-gb      500
es         320
und        143
fr         50

列0包含原始数据框中索引列中每个语言值出现次数的值。

我要做的是将两个值组合为“en”和“en-gb”,以便将它们计为一个。

我想要一个看起来像这样的新系列:

Index      0

en         42500
es         320
und        143
fr         50

编辑:建议告诉我修改原始DataFrame。这个建议的问题在于我没有传统的数据帧作为我的Pandas系列的来源。

相反,我的Pandas系列的起源是一个字典列表,在这些字典中,其中一个键是另一个字典。

所以要明确我有:成千上万的词典列表。

每个词典的一个关键词是“用户”。

“user”键的值是另一个字典。

在第二个字典中有一个键“lang”和值“en”,“en-gb”,“es”,“fr”等等。

在视觉上,我猜我原始数据的样本如下所示:

list_of_things = [
{'id':4444, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'},

{'id':555, 'user': {'lang':'fr', 'gibberish':'*#(#($&'}, 'location':'France'}, 

{'id':666, 'user': {'lang':'en-gb', 'gibberish':'*#(#($&'}, 'location':'Great Britain'}, 

{'id':777, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'}, 

{'id':888, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'}, {'id':999, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'},

{'id':888, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'}, {'id':999, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'},
{'id':888, 'user': {'lang':'en', 'gibberish':'*#(#($&'}, 'location':'USA'}, {'id':999, 'user': {'lang':'es', 'gibberish':'*#(#($&'}, 'location':'Spain'},
{'id':888, 'user': {'lang':'en-gb', 'gibberish':'*#(#($&'}, 'location':'Great Britain'}, {'id':999, 'user': {'lang':'und', 'gibberish':'*#(#($&'}, 'location':'Unknown'},
]

1 个答案:

答案 0 :(得分:0)

尝试

df.groupby(df['Index'].str[:2])['0'].sum()

df.groupby(df['Index'].str.split('-').str[0])['0'].sum()

你得到了

Index
en    42500
es      320
fr       50
un      143