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