J'essaye de group et sum dicts d'un DataFrame comme ceci:

dt = [
    {'discount_value': 10, 'is_cumulative': True, 'code': 'x'},
    {'discount_value': 10, 'is_cumulative': True, 'code': 'x1'},
    {'discount_value': 10, 'is_cumulative': False, 'code': 'x2'}
]

df = pandas.DataFrame(dt).groupby('is_cumulative')
result = df.sum()

Le résultat est:

               discount_value
is_cumulative                
False                      10
True                       20

Mais je dois obtenir toutes les clés de «code» utilisées pour additionner le résultat final, par exemple:

result['discount_value'][True]  # 20
# how to get the codes "x" and "x1"? 
1
Rafa Acioly 3 juin 2020 à 00:03

3 réponses

Meilleure réponse

Voici ce que tu veux:

import pandas 
dt = [
    {'discount_value': 10, 'is_cumulative': True, 'code': 'x'},
    {'discount_value': 10, 'is_cumulative': True, 'code': 'x1'},
    {'discount_value': 10, 'is_cumulative': False, 'code': 'x2'}
]

df = pandas.DataFrame(dt).groupby('is_cumulative')
result = df.agg({'discount_value':sum, 'code':list})
print(result)

Le résultat:

               discount_value     code
is_cumulative                         
False                      10     [x2]
True                       20  [x, x1]
2
paradoxlover 2 juin 2020 à 21:09

C'est ce que vous cherchez:

df = pd.DataFrame(dt)
df = df.groupby(by=['is_cumulative']).agg({'code': ','.join, 'discount_value': 'sum'})
print(df)
print('codes = {}'.format(df.loc[True]['code']))

               code  discount_value
is_cumulative
False            x2              10
True           x,x1              20

codes = x,x1
0
NYC Coder 2 juin 2020 à 21:11

Je ferais un peu différemment:

dt = [
    {'discount_value': 10, 'is_cumulative': True, 'code': 'x'},
    {'discount_value': 10, 'is_cumulative': True, 'code': 'x1'},
    {'discount_value': 10, 'is_cumulative': False, 'code': 'x2'}
]

df = pd.DataFrame(dt)                         # here
result = df.groupby('is_cumulative').sum()    # and here

# get the code
df.loc[df.is_cumulative, 'code']

Production:

0     x
1    x1
Name: code, dtype: object
0
Quang Hoang 2 juin 2020 à 21:08