Усреднение фреймов данных со многими строковыми столбцами и отображение всех столбцов - PullRequest
0 голосов
/ 09 мая 2020

Я боролся с этим даже после того, как безрезультатно посмотрел на различные прошлые ответы. Мои данные состоят из столбцов numeri c и non numeri c. Я хотел бы усреднить столбцы numeri c и отобразить мои данные в столбцах GUI вместе с информацией о столбцах non-numeri c. Столбцы non numeri c имеют такую ​​информацию, как имена, rollno, поток, а столбцы numeri c содержат оценки учащихся по различным предметам. Он хорошо работает при работе с одним фреймом данных, но терпит неудачу, когда я объединяю два или более фрейма данных, в которых он возвращает только среднее значение столбцов numeri c и отображает его, оставляя не отображаемые столбцы c. Ниже приведен один из кодов, которые я пробовал до сих пор.

df=pd.concat((df3,df5))
dfs =df.groupby(df.index,level=0).mean()
headers = list(dfs)
self.marks_table.setRowCount(dfs.shape[0])
self.marks_table.setColumnCount(dfs.shape[1])
self.marks_table.setHorizontalHeaderLabels(headers)
df_array = dfs.values
for row in range(dfs.shape[0]):
    for col in range(dfs.shape[1]):
        self.marks_table.setItem(row, col,QTableWidgetItem(str(df_array[row,col])))

Рабочий код должен возвращать средние значения примерно так

   STREAM ADM  NAME        KCPE  ENG  KIS
0  EAGLE  663  FLOYCE ATI  250   43    5
1  EAGLE  664  VERONICA    252   32   33
2  EAGLE  665  MACREEN A   341   23   23
3  EAGLE  666  BRIDGIT     286   23    2

вместо

     ADM   KCPE   ENG   KIS
0  663.0  250.0  27.5  18.5
1  664.0  252.0  26.5  33.0
2  665.0  341.0  17.5  22.5
3  666.0  286.0  38.5  23.5

Пример данных

Df1 = pd.DataFrame({
     'STREAM':[NORTH,SOUTH],
     'ADM':[437,238,439], 
'NAME':[JAMES,MARK,PETER], 
'KCPE':[233,168,349], 
'ENG':[70,28,79],
'KIS':[37,82,79],
'MAT':[67,38,29]})
Df2 = pd.DataFrame({
     'STREAM':[NORTH,SOUTH],
     'ADM':[437,238,439], 
'NAME':[JAMES,MARK,PETER], 
'KCPE':[233,168,349], 
'ENG':[40,12,56],
'KIS':[33,43,43],
'MAT':[22,58,23]})

1 Ответ

1 голос
/ 09 мая 2020

Ваш вопрос не ясен. Однако угадываем происхождение вопроса по содержанию. Я изменил ваши фреймы данных, которые не были хорошо обработаны, добавив поток под названием 'CENTRAL', см.

Df1 = pd.DataFrame({'STREAM':['NORTH','SOUTH', 'CENTRAL'],'ADM':[437,238,439], 'NAME':['JAMES','MARK','PETER'],'KCPE':[233,168,349],'ENG':[70,28,79],'KIS':[37,82,79],'MAT':[67,38,29]})

Df2 = pd.DataFrame({     'STREAM':['NORTH','SOUTH','CENTRAL'],'ADM':[437,238,439], 'NAME':['JAMES','MARK','PETER'],'KCPE':[233,168,349],'ENG':[40,12,56],'KIS':[33,43,43],'MAT':[22,58,23]})

Я предположил, что вы хотите объединить два фрейма данных и найти среднее

df3=Df2.append(Df1)


df3.groupby(['STREAM','ADM','NAME'],as_index=False).sum()

Результат

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...