【问题标题】:Averaging dataframes with many string columns and display back all the columns平均具有许多字符串列的数据帧并显示所有列
【发布时间】:2020-05-08 21:15:21
【问题描述】:

即使查看了过去的各种答案都无济于事,我也一直在为此苦苦挣扎。 我的数据由数字列和非数字列组成。我想平均数字列并将我的数据与非数字列上的信息一起显示在 GUI 上。非数字列包含名称、rollno、流等信息,而数字列包含各种科目的学生分数.它在处理一个数据帧时效果很好,但当我组合两个或多个数据帧时失败,它只返回数字列的平均值并显示它,而不显示非数字列。以下是我迄今为止尝试过的代码之一。

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]})

【问题讨论】:

  • 能否提供一些原始数据?
  • 如何上传?我要复制粘贴到这里吗?
  • @Ptar 请避免不必要地使用 pyqt5 标签。您的应用程序可能正在使用该库,但您的问题与 pyqt5 无关。
  • 检查编辑中给出的示例数据
  • NameError: name 'NORTH' is not defined

标签: pandas numpy python-3.7


【解决方案1】:

你的问题不清楚。但是根据内容猜测问题的来源。我通过添加一个名为“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()

结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多