Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算数据帧groupby列和联接结果的最小最大平均中值_Python_Python 3.x_Pandas - Fatal编程技术网

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

Python 计算数据帧groupby列和联接结果的最小最大平均中值,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个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/S

我有一个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')
但当我尝试计算最小值和最大值并将其添加到数据帧时,出现以下错误:

ValueError:列重叠但未指定后缀:索引(['Px/SQM'],dtype='object')

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

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重命名列,但我无法使其工作

pandas\u df:pd.DataFrame=my\u pandas\u sql.pull\u data\u from\u mysqldb(query=sql\u string)
min_px=pandas_df.groupby(['ZIP','Updated','Buy/Rent'])[['px/SQM']]。应用(np.min)
min_px.name='min px/SQM'
结果\u min\u df=pandas\u df.join(min\u px,on=['ZIP','Updated','Buy/Rent'],how=“left”,lsuffix=“\u min”)
结果\u min\u df.到\u csv(路径\u或\u buf='min\u 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')

当您需要将
添加到原始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')

谢谢,我本来打算用吼声,这会触发很多警告:我有40万行。每次转换调用大约需要一分钟。是否有一种方法可以在一次过程中计算最小-最大平均列数?