根据索引在列之间连接元素

2024-05-08 23:26:52 发布

您现在位置:Python中文网/ 问答频道 /正文

当您想要创建一个更全局的集合时,有一个手动过程来组合表中的元素。这个想法是使用熊猫工具,使它更容易和更自主

让我们考虑下一个例子,在这里你有下一张表格,里面有一些大学的信息和在学期的第四个学期里表现优异的学生。如您所见,存在一些“nan”值

        1 Semester   2 Semester    3 Semester   4 Semester
Harvard    Oliver        nan         Michael       nan
MIT         Noah         Connor      Callum      George
            Jack          nan          nan        Oscar
Stanford    Harry         nan          Kyle        nan
            Liam          nan         Reece        nan
Georgia     Jake         Charlie       nan         nan
            Jacob        Damian        nan         nan
            Mason        Daniel        nan         nan

其想法是显示每个硕士的表格,因此您需要加入每个学期,并创建一列,如下一个表格所示

           Master
Harvard    Oliver
           Michael
  MIT       Noah
            Jack
            Connor
            Callum
            George
            Oscar
Stanford    Harry
            Liam
            Kyle
            Reece
 Georgia    Jake
            Jacob
            Mason
           Charlie
            Damian
            Daniel

我尝试过许多选项,如合并、连接和连接,但没有一个适合我

import pandas as pd
data = pd.read_csv('/home/datasci/PEC/prog_datasci_4/data/university.csv')

sub_table= data[['university','1_semester','2_semester',  
'3_semester','4_semester']]

retri = sub_table.set_index('university')

location_battle = 
retri.astype(str).groupby(['university','1_semester','2_semester',  
'3_semester','4_semester'])

我的目标是连接第一个表的列(第1、2、3、4学期)并创建一个列,而不考虑“nan”值


Tags: datamitnan表格学期michaelgeorgeuniversity
1条回答
网友
1楼 · 发布于 2024-05-08 23:26:52

^{}^{}一起使用,对于新列^{}

df = pd.read_csv('/home/datasci/PEC/prog_datasci_4/data/university.csv')

cols = ['1 Semester','2 Semester', '3 Semester','4 Semester']
df1 = (df.set_index('university')[cols]
        .stack()
        .reset_index(level=1, drop=True)
        .rename_axis('University')
        .reset_index(name='Master'))
print (df1)
   University   Master
0     Harvard   Oliver
1     Harvard  Michael
2         MIT     Noah
3         MIT   Connor
4         MIT   Callum
5         MIT   George
6         MIT     Jack
7         MIT    Oscar
8    Stanford    Harry
9    Stanford     Kyle
10   Stanford     Liam
11   Stanford    Reece
12    Georgia     Jake
13    Georgia  Charlie
14    Georgia    Jacob
15    Georgia   Damian
16    Georgia    Mason
17    Georgia   Daniel

如果需要索引中的第一列:

cols = ['1 Semester','2 Semester', '3 Semester','4 Semester']
df2 = (df.set_index('university')[cols]
         .stack()
         .reset_index(level=1, drop=True)
         .to_frame('Master'))
print (df2)
             Master
university         
Harvard      Oliver
Harvard     Michael
MIT            Noah
MIT          Connor
MIT          Callum
MIT          George
MIT            Jack
MIT           Oscar
Stanford      Harry
Stanford       Kyle
Stanford       Liam
Stanford      Reece
Georgia        Jake
Georgia     Charlie
Georgia       Jacob
Georgia      Damian
Georgia       Mason
Georgia      Daniel

相关问题 更多 >

    热门问题