2017-02-19 124 views
2

我有一個DataFrame,其列名形狀爲x.y,我想總結所有在x上具有相同值的列,而不必明確命名它們。也就是說,column_name.split(".")[0]的值應該決定它們的組。這裏有一個例子:根據列名稱的條件求和熊貓數據框列值

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

您可以先建立由splitMultiindex然後通過第一級和彙總sumgroupby

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