python - 计算 pandas DataFrame groupby 列的最小最大平均中位数并连接结果

标签 python python-3.x pandas

我有一个 pandas DataFrame,我想在一列上执行最小值、最大值、平均值、中值计算,并使用 A、B 和 C 列对它们进行分组。 然后我想将结果合并到初始 DataFrame 中。 当我计算中位数时,我使用波纹管成功了:

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')

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

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')

最佳答案

当你需要给原来的dfs添加columns时,你总是可以使用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')

关于python - 计算 pandas DataFrame groupby 列的最小最大平均中位数并连接结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57367454/

相关文章:

python - 将多个值列表映射到 python 字典中的键列表?

python - PyQt5 信号和线程

python - 从 JSON 字段中拆分字符串值并分配给 YAML 映射

python - 在 pandas.query() 中使用 LIKE

python - 如何将嵌套字典从 BeautifulSoup 转换为 pandas 数据框

python - Pandas 将 JSON 读取到 Excel 中

python - 从 skimage 轮廓创建蒙版

python - 使用 Python,您可以使用正则表达式 grep 遍历文件而不将其全部拉入内存吗?

python - 使用管道将数据从 c 程序发送到 python 程序?

python-2.7 - 在 PyCharm 中使用并排安装了 python 2 和 3 的 Nose 测试