根据列名的条件对pandas数据帧列值进行求和

时间:2017-02-19 15:06:12

标签: python pandas

我有一个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

2 个答案:

答案 0 :(得分:3)

您可以先按split创建Multiindex,然后按第一级创建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

答案 1 :(得分: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