2017-02-19 3 views
2

У меня есть DataFrame с именами столбцов в форме x.y, где я хотел бы суммировать все столбцы с тем же значением на x, не указывая их явно. То есть значение column_name.split(".")[0] должно определять их группу. Вот пример:Значения столбцов данных базы данных sum pandas на основе условия имени столбца

import pandas as pd 
df = pd.DataFrame({'x.1': [1,2,3,4], 'x.2': [5,4,3,2], 'y.8': [19,2,1,3], 'y.92': [10,9,2,4]}) 

df 
Out[3]: 
    x.1 x.2 y.8 y.92 
0 1 5 19 10 
1 2 4 2  9 
2 3 3 1  2 
3 4 2 3  4 

Результат должен быть таким же, как эта операция, только я не должен явно перечислить имена столбцов и как они должны группой.

pd.DataFrame({'x': df[['x.1', 'x.2']].sum(axis=1), 'y': df[['y.8', 'y.92']].sum(axis=1)}) 

    x y 
0 6 29 
1 6 11 
2 6 3 
3 6 7 

ответ

3

Вы можете сначала создать Multiindex по split, а затем groupby на первом уровне и совокупным sum:

df.columns = df.columns.str.split('.', expand=True) 
print (df) 
    x  y  
    1 2 8 92 
0 1 5 19 10 
1 2 4 2 9 
2 3 3 1 2 
3 4 2 3 4 

df = df.groupby(axis=1, level=0).sum() 
print (df) 
    x y 
0 6 29 
1 6 11 
2 6 3 
3 6 7 
3

Другой вариант, вы можете извлечь префикс из имен столбцов и использовать его в качестве переменной группы :

df.groupby(by = df.columns.str.split('.').str[0], axis = 1).sum() 

# x y 
#0 6 29 
#1 6 11 
#2 6 3 
#3 6 7 
Смежные вопросы