展开一列条目并添加熊猫中一个或多个行的值

Mac*_*lda 2 python pandas

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

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

以及我想要的是:

在此处输入图片说明

我最接近的是

my.loc['Apple'] +=my.loc['Pomme'] += my.loc['aeble']
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*s A 5

如果你有一些dict映射所有fruit值一种语言,你可以使用groupbymap与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'})
Run Code Online (Sandbox Code Playgroud)

[出]

                      fruit  bites
fruit                             
Apple   Apple, Pomme, aeble      5
Banana        Banana, Banan      4
Orange      Orange, Apelsin      7
Run Code Online (Sandbox Code Playgroud)

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

from googletrans import Translator
translator = Translator()

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

[出]

{'Apple': 'Apple',
 'Banana': 'Banana',
 'Pomme': 'Apple',
 'aeble': 'aeble',
 'Banan': 'Banana',
 'Orange': 'Orange',
 'Apelsin': 'Orange'}
Run Code Online (Sandbox Code Playgroud)

如您所见,它不是完美的,但是可以让您获得先机,而不是完全手动创建。