数据是这样的:
import pandas as pd
data_file = 'team.xlsx'
df = pd.read_excel(data_file)
print(df.head())
'''
name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
1 Arry C 36 37 37 57
2 Ack A 57 60 18 84
3 Eorge C 93 96 71 78
4 Oah D 65 49 61 86
'''
然后我写里两行代码,按照team 和 name首字母为 元音\辅音 来分类聚合,发现每次name都会print出来:
def get_letter_type(letter):
if letter[0].lower() in 'aoeiu':
return '元音'
else:
return '辅音'
d = df.groupby(['team',df.name.apply(get_letter_type)]).sum()
print(d)
'''
name Q1 ... Q3 Q4
team name ...
A 元音 AckOscarArthurAaron 274 ... 141 199
辅音 LfieJoshuaHenryLucasReggie1TobyDylanHugo0Caleb... 792 ... 734 584
B 元音 AcobEdwardElijahElliottAlbert0 309 ... 269 218
辅音 LeoLoganThomasHarrisonSamuelHarleyJensonFranki... 666 ... 933 918
C 元音 ArryEorgeArchieAlexanderAdamOllie3ElliotEllisA... 473 ... 453 464
辅音 HarlieTheoWilliamDanielSebastianTommyJake3Matt... 583 ... 615 663
D 元音 OahEthanAlbie1AlexEzraAiden 273 ... 409 486
辅音 ReddieMasonFinleyBenjaminLouieCarter7Bobby1Luc... 587 ... 832 713
E 元音 IsaacArlo8Eli 133 ... 138 207
辅音 LiverJamesMaxTeddyRileyJosephJaxonJudeRory9Zac... 830 ... 743 826
'''
我不想要这个name,想了很多办法,都不好使,最后只能用笨办法:
d3 和d4得到相同的结果,但我感觉还是很麻烦,
求高手指点,有没有更好的办法,不要显示name出来?
d3 = df.filter(items=['team','Q1','Q2','Q3','Q4']).groupby(['team',df.name.apply(get_letter_type)]).sum()
print(d3)
d4 = df.iloc[:,1:].groupby(['team',df.name.apply(get_letter_type)]).sum()
print(d4)
'''
team name
A 元音 274 197 141 199
辅音 792 442 734 584
B 元音 309 291 269 218
辅音 666 927 933 918
C 元音 473 488 453 464
辅音 583 706 615 663
D 元音 273 333 409 486
辅音 587 858 832 713
E 元音 133 131 138 207
辅音 830 882 743 826
'''