当前位置: 首页 > 知识库问答 >
问题:

计算数据帧groupby列和联接结果的最小最大平均中值

乜璞瑜
2023-03-14

我有一个pandas数据框,我想在一列上执行min、max、mean、median计算,使用列a、B和C对它们进行分组。然后我想将结果合并到初始数据框。当我计算中位数时,我成功地使用了以下命令:

pandas_df: pd.DataFrame = my_pandas_sql.pull_data_from_mysqldb(query=sql_string)
median_px = pandas_df.groupby(['ZIP', 'Updated', 'Buy/Rent'])[['Px/SQM']].apply(np.median)
median_px.name = 'Median Px/SQM'
result_median_df = pandas_df.join(median_px, on=['ZIP', 'Updated', 'Buy/Rent'], how="left")
result_median_df.to_csv(path_or_buf='median.csv')

但当我尝试计算最小值和最大值并将其添加到数据帧时,出现以下错误:

列重叠,但没有指定后缀:索引(['Px/SQM'],dtype='对象')

用于最小值或最大值的代码:

pandas_df: pd.DataFrame = my_pandas_sql.pull_data_from_mysqldb(query=sql_string)
min_px = pandas_df.groupby(['ZIP', 'Updated', 'Buy/Rent'])[['Px/SQM']].apply(np.min)
min_px.name = 'Min Px/SQM'
result_min_df = pandas_df.join(min_px, on=['ZIP', 'Updated', 'Buy/Rent'], how="left")
result_min_df.to_csv(path_or_buf='min_px.csv')

我已经尝试使用后缀,它将工作,但我想使用我自己的列全名。还是我必须在使用后重命名?

另外,我相信有一种方法可以将请求作为数组发出:[np.min,np.mean,np.median,np.max],并使用agg重命名列,但我无法使其工作。

>

  • Max和Min在熊猫Groupby约会

    熊猫:计算列组的中位数

    pandas_df: pd.DataFrame = my_pandas_sql.pull_data_from_mysqldb(query=sql_string)
    min_px = pandas_df.groupby(['ZIP', 'Updated', 'Buy/Rent'])[['Px/SQM']].apply(np.min)
    min_px.name = 'Min Px/SQM'
    result_min_df = pandas_df.join(min_px, on=['ZIP', 'Updated', 'Buy/Rent'], how="left", lsuffix="_min")
    result_min_df.to_csv(path_or_buf='min_px.csv')
    

    在得到很好的回答后,只需一句评论。

    我试图使用此处显示的代码,该代码触发了大量警告,并且比建议的解决方案慢:

    df1=pandas_df.groupby(['ZIP', 'Updated', 'Buy/Rent']).agg({'Px/SQM':                                                                   {'Min': np.min,'Max': np.max,'Mean': np.mean,'Median': np.median                                                                  }} ).reset_index()df3= pd.merge(pandas_df, df1, on=['ZIP', 'Updated', 'Buy/Rent'], how='left')
    
  • 共有1个答案

    公羊凌
    2023-03-14

    当您需要向原始dfs添加时,您可以始终使用转换

    g=pandas_df.groupby(['ZIP', 'Updated', 'Buy/Rent'])['Px/SQM']
    
    pandas_df['Max']=g.transform('max')
    pandas_df['Min']=g.transform('min')
    pandas_df['Median']=g.transform(np.median)
    pandas_df['Mean']=g.transform('mean')
    
     类似资料:
    • 该程序每秒接收大约50000个数字。 在任何给定时刻,我都需要计算最后一秒到达的值(数字)的最小值、最大值和平均值(关于给定时刻)。 有没有办法不用数组或列表(缓冲区)来存储到达的数字和计算结果? 如果我需要使用缓冲区,那么实现这一点的有效方法是什么? (请注意,缓冲区中的数字也必须不时有效地删除)

    • 我有一个pyspark数据框,在这里我可以找到每列的最小/最大值和最小/最大值计数。我可以使用: 我希望在同一数据帧中也有最小/最大值的计数。我需要的具体输出: …|col|n|col|m| …|xn | xm |。。。最小值(col(coln)) 计数(col_n==xn)|计数(col_m==xm)|。。。

    • 还有其他关于datatable上的行运算符的帖子。它们要么太简单,要么解决了特定的场景 我这里的问题更一般。有一个使用dplyr的解决方案。我已经尝试过了,但没有找到一个使用数据的等效解决方案。表语法。你能推荐一个优雅的数据吗。与dplyr版本复制相同结果的表解决方案? 编辑1:真实数据集上建议解决方案的基准总结(10MB,73000行,24个数字列上的统计数据)。基准结果是主观的。然而,经过的时

    • 问题内容: 我很难找出例如如何从列表中查找分钟 如何通过定义()函数来查找此列表的最小值和最大值 我不想使用内置功能 问题答案: 如果要手动查找最小值作为函数: Python 3.4引入了该软件包,该软件包提供了其他统计信息: