问题的提出:
想将几行合并,并只保留某一行,其余各行的数据汇总到保留行;
原始数据,按索引给加上姓名(学生+索引),只保留学生0,把学生0,学生1,学生2,学生5的数据累加至学生0行;
语文 类别 数学 政治
0 100 95 100 98
1 90 98 99 94
2 88 95 98 95
3 99 98 97 92
4 95 90 96 88
5 94 94 93 77
方法如下:
import pandas as pdchengji=[[100,95,100,98],[90,98,99,94],[88,95,98,95],[99,98,97,92],[95,90,96,88],[94,94,93,77]]data=pd.Dataframe(chengji,columns=['语文','类别','数学','政治'])print(data.index,data.columns)print(data)data['姓名']=data.index.map(lambda x:"学生"+str(x))print('新改列源n',data)data1=data.copy()hebing=['学生0']hebingh=['学生1','学生2','学生5']data1.loc['hebing']=data1.loc[data1['姓名'].isin(hebingh + hebing)].sum()print('加总n',data1)data1=data1[~data1['姓名'].isin(hebingh + hebing)].copy() #如不用copy,则下面.loc有警告data1.loc['hebing','姓名']=hebing[0]print('想要的结果n',data1)data1=data.copy()print(data1.loc[data1['姓名']==hebing[0]])print((pd.Dataframe(data1.loc[data1['姓名'].isin(hebingh + hebing)].sum()).T).drop('姓名',axis=1))data1.loc[data1['姓名']==hebing[0],['语文','类别','数学','政治']]=pd.Dataframe(data1.loc[data1['姓名'].isin(hebingh + hebing)].sum()).Tprint('加总n',data1)data1=data1[~data1['姓名'].isin(hebingh)].copy() #如不用copy,则下面.loc有警告print('想要的结果2n',data1)
结果如下:
RangeIndex(start=0, stop=6, step=1) Index(['语文', '类别', '数学', '政治'], dtype='object')
语文 类别 数学 政治
0 100 95 100 98
1 90 98 99 94
2 88 95 98 95
3 99 98 97 92
4 95 90 96 88
5 94 94 93 77新改列源
语文 类别 数学 政治 姓名
0 100 95 100 98 学生0
1 90 98 99 94 学生1
2 88 95 98 95 学生2
3 99 98 97 92 学生3
4 95 90 96 88 学生4
5 94 94 93 77 学生5加总
语文 类别 数学 政治 姓名
0 100 95 100 98 学生0
1 90 98 99 94 学生1
2 88 95 98 95 学生2
3 99 98 97 92 学生3
4 95 90 96 88 学生4
5 94 94 93 77 学生5
hebing 372 382 390 364 学生0学生1学生2学生5想要的结果
语文 类别 数学 政治 姓名
3 99 98 97 92 学生3
4 95 90 96 88 学生4
hebing 372 382 390 364 学生0语文 类别 数学 政治 姓名
0 100 95 100 98 学生0
语文 类别 数学 政治
0 372 382 390 364加总
语文 类别 数学 政治 姓名
0 372 382 390 364 学生0
1 90 98 99 94 学生1
2 88 95 98 95 学生2
3 99 98 97 92 学生3
4 95 90 96 88 学生4
5 94 94 93 77 学生5想要的结果2
语文 类别 数学 政治 姓名
0 372 382 390 364 学生0
3 99 98 97 92 学生3
4 95 90 96 88 学生4
其中结果二中可以直接保留学生0的姓名序列;较为方便,结果一的方法更容易理解;