我有一个熊猫数据帧,我想对一列执行最小值,最大值,平均值,中位数计算,并使用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:列重叠但没有指定后缀:Index(['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_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')
当你需要添加columns
到原来的dfs时,你可以始终使用transform
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')