Python 对Dataframe中具有匹配列标题的列求和
我有一个数据帧,目前看起来有点像这样Python 对Dataframe中具有匹配列标题的列求和,python,pandas,dataframe,group-by,pandas-groupby,Python,Pandas,Dataframe,Group By,Pandas Groupby,我有一个数据帧,目前看起来有点像这样 import pandas as pd In [161]: pd.DataFrame(np.c_[s,t],columns = ["M1","M2","M1","M2"]) Out[161]: M1 M2 M1 M2 6/7 1 2 3 5 6/8 2 4 7 8 6/9 3 6 9 9
import pandas as pd
In [161]: pd.DataFrame(np.c_[s,t],columns = ["M1","M2","M1","M2"])
Out[161]:
M1 M2 M1 M2
6/7 1 2 3 5
6/8 2 4 7 8
6/9 3 6 9 9
6/10 4 8 8 10
6/11 5 10 20 40
除此之外,从M1到M340,大约有1000列(有多个列具有相同的标题),而不是只有四列。我想根据匹配列的索引对与之关联的值求和。理想情况下,结果数据帧如下所示:
M1_sum M2_sum
6/7 4 7
6/8 9 12
6/9 12 15
6/10 12 18
6/11 25 50
我想以某种方式应用“groupby”和“sum”函数,但在处理具有多个列且某些列与其他3个列匹配,而另一个列可能只有一个列匹配(甚至0个其他列匹配)的数据帧时,我不确定如何做到这一点.您可能希望在第一个级别和第二个轴上执行
分组,然后执行.sum()
,如:
>>> df.groupby(level=0,axis=1).sum().add_suffix('_sum')
M1_sum M2_sum
0 4 7
1 9 12
2 12 15
3 12 18
4 25 50
如果我们将最后一列重命名为M1
,它将再次正确分组:
>>> df
M1 M2 M1 M1
0 1 2 3 5
1 2 4 7 8
2 3 6 9 9
3 4 8 8 10
4 5 10 20 40
>>> df.groupby(level=0,axis=1).sum().add_suffix('_sum')
M1_sum M2_sum
0 9 2
1 17 4
2 21 6
3 22 8
4 65 10