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

时间:2019-04-16 13:16:06

标签: python pandas python-2.7 pandas-groupby

要创建更全局的集合时,需要执行手动过程来合并表中的元素。这个想法是使用熊猫工具使其变得更容易和更自治。

让我们考虑下一个示例,在下一个表格中,您可以看到一些硕士和研究生在每个学期都表现出色的大学和学生的信息。如您所见,有一些“ nan”值。

1987-10-24

该想法是显示每个主表,因此您需要加入每个学期并创建一个单列,如下表所示。

        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

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

1 个答案:

答案 0 :(得分:1)

DataFrame.set_indexDataFrame.stack一起使用,并将Series.reset_index用作新列:

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