首页 > 解决方案 > 展开列条目并从 pandas 中的一行或多行添加值

问题描述

我有一个具有相同含义的条目的数据框,我想将它们放在同一行(和列)中。我的模拟df:

my = pd.DataFrame(
{'fruit': ['Apple', 'Banana', 'Pomme', 'aeble', 'Banan', 'Orange', 'Apelsin'],
'bites': [1, 2, 3, 1, 2, 3, 4]})

以及我希望它是什么:

在此处输入图像描述

我得到的最接近的是

my.loc['Apple'] +=my.loc['Pomme'] += my.loc['aeble']

但我想知道是否有更简单的方法。

标签: pythonpandas

解决方案


如果您有一些dict将所有值映射fruit到一种语言的方法,则可以使用groupbyandmap与 agg 函数joinsum:

d = {'Apple': 'Apple',
     'Banana': 'Banana',
     'Pomme': 'Apple',
     'aeble': 'Apple',
     'Banan': 'Banana',
     'Orange': 'Orange',
     'Apelsin': 'Orange'
    }

my.groupby(my['fruit'].map(d)).agg({'fruit': lambda x: ', '.join(x),
                                    'bites': 'sum'})

[出去]

                      fruit  bites
fruit                             
Apple   Apple, Pomme, aeble      5
Banana        Banana, Banan      4
Orange      Orange, Apelsin      7

帮助生成映射的一种方法是dict使用googletrans包:

from googletrans import Translator
translator = Translator()

d = {x.origin: x.text for x in translator.translate(my['fruit'].unique().tolist())}

[出去]

{'Apple': 'Apple',
 'Banana': 'Banana',
 'Pomme': 'Apple',
 'aeble': 'aeble',
 'Banan': 'Banana',
 'Orange': 'Orange',
 'Apelsin': 'Orange'}

如您所见,它并不完美,但会给您一个良好的开端,而不是完全手动创建。


推荐阅读