2017-07-05 3 views
1

je peux obtenir la somme de toutes les valeurs dans une des conditions spécifiées réunion de dataframe en tapantSélection dynamique des champs de trame de données par comparaison de la valeur

df.loc[(df[column_1] == value_1) & (df[column_2] == value_2), columnWithValues].sum() 

Je cherche une solution simple qui utilise un ensemble de colonnes et de valeurs spécifiées . Y a-t-il quelque chose comme ce qui suit?

set_columns = set([column_1, column_2]) 
set_values = set([value_1, value_2]) 
df.loc[set_col == set_val, columnWithValues].sum() 

De cette façon, l'entrée peut avoir un nombre quelconque d'arguments.

Répondre

1

Vous pouvez mettre les noms des colonnes à interroger dans une liste , et les valeurs cibles dans un tuple; Définissez les colonnes comme index sur la trame de données et interroger les valeurs:

columns = ['column_1', 'column_2'] 
values = ('value_1', 'value_2') 

df.set_index(columns).loc[values, columnWithValues].sum() 

Exemple:

df = pd.DataFrame({ 
     "A": [1,1,1,1,2,2,2,2], 
     "B": [1,1,2,2,3,3,4,4], 
     "C": [2,1,2,3,4,3,5,6], 
     "D": [5,3,2,1,6,7,8,9] 
    }) 

columns = ['A', 'B'] 
values = (2,4) 
df.set_index(columns).loc[values, ['C','D']].sum() 

#C 11 
#D 17 
#dtype: int64 
+0

Wow, c'est le génie. Merci beaucoup! – eyeweiss