【问题标题】:Averaging of several values多个值的平均值
【发布时间】:2022-11-22 18:35:33
【问题描述】:

我有一个包含五列 x、y、r、g 和 b 的数据集 (df3),尽管我只需要使用 x、y 和 r。我想找到 r 值相等的所有连续行的平均值,并将其存储在数据库 (df_final) 中。为此,我生成了一个代码,用于将 r 等于前一行中的所有值存储在临时数据库 (df_inter) 中,以便稍后将所有值的平均值存储在最终数据库 (df_final) 中。代码是这样的:

for i in range(len(df3)):
  if df3.iloc[i,3] == df3.iloc[i-1,3]:
    df_inter = pd.DataFrame(columns=['x','y', 'r'])
    df_inter.append(df3.iloc[i,1],df3.iloc[i,2],df3.iloc[i,3])
    df_inter.to_csv(f'Resultados/df_inter.csv', index=False, sep=',')
  else:
    df_final.append(df_inter['x'].mean(),df_inter['y'].mean(),df_inter['r'].mean())
    del [[df_inter]]
    gc.collect()
    df_inter=pd.DataFrame()
    df_inter = pd.DataFrame(columns=['x','y', 'r'])
    df_inter.append(df3.iloc[i,1],df3.iloc[i,2],df3.iloc[i,3])
    df_final.to_csv(f'Resultados/df_final.csv', index=False, sep=',')

然而,当我执行代码时,我收到此错误消息:

TypeError: cannot concatenate object of type '<class 'numpy.int64'>'; only Series and DataFrame objs are valid

我不确定问题是什么,或者即使有更有效的代码来达到目的。拜托,如果你能帮助我,我将不胜感激。先感谢您。

艾琳

【问题讨论】:

  • 提供您的起始 df 的可重现示例可能是有意义的,然后提供您希望输出的样子。
  • 为什么是 del [[df_inter]]gc.collect()

标签: python pandas database


【解决方案1】:

如果你对SQL有一些了解,可以使用sqldfpandas直观地完成:

import sqldf
import pandas as pd

df = pd.DataFrame({"class":[1,1,1,2,2,2,1,2,2,1],"value":[10,10,12,11,15,17,98,23,22,0]})

averages = sqldf.run("""
                     SELECT class,AVG(value)
                     FROM df
                     GROUP BY class
""")

输出为:

    class  AVG(value)

0      1        26.0
1      2        17.6

那是你要找的吗?

【讨论】:

    【解决方案2】:

    您可能希望使用 append 到数据帧的末尾

    
    df_inter = df_inter.append({'x':df3.iloc[i,1],'y':df3.iloc[i,2],'r':df3.iloc[i,3]}, ignore_index=True)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-06
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      相关资源
      最近更新 更多