Соединить элементы между столбцами в соответствии с индексом - PullRequest
0 голосов
/ 16 апреля 2019

Существует ручной процесс объединения элементов из таблицы, когда вы хотите создать более глобальный набор. Идея состоит в том, чтобы использовать инструменты Pandas, чтобы сделать его более простым и автономным.

Давайте рассмотрим следующий пример, где у вас есть следующая таблица с информацией о некоторых университетах и ​​студентах, у которых есть отличные результаты в каждом семестре, в течение четвертого семестра магистра. Как видите, есть некоторые значения "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"

1 Ответ

1 голос
/ 16 апреля 2019

Используйте DataFrame.set_index с DataFrame.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...