Я боролся с этим даже после того, как безрезультатно посмотрел на различные прошлые ответы. Мои данные состоят из столбцов 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]})