在汇总统计的Pandas数据框中创建子列

n3ipq98p  于 2023-02-20  发布在  其他
关注(0)|答案(2)|浏览(131)

我正在处理地表水位置和地下水井位置的水质数据。我想为所有三个参数(pH值、温度、盐度)创建一个汇总统计表,按采样位置(地表水与地下水)分组,如下所示:

|           'Surface Water'    |       'Groundwater'          |
            ___________________________________________________________________________
           |  min  | max  |  mean  | std  | min  |  max  |  mean  | std
'pH'

设置Excel工作表以进行数据收集的方法包括以下列:日期、监测ID(地表水或地下水)、pH值、温度和盐度。
我怎样才能告诉python去做这个呢?我熟悉groupby和describe()函数,但是我不知道如何按照我想要的方式来组织它。任何帮助都将不胜感激!
我试着对每个描述性统计数据使用groupby函数,例如:

mean = df.\
    groupby('Monitoring ID')\
    [['pH', 'SAL (ppt)', 'Temperature (°C)', 'DO (mg/L)']].mean()

min = df.\
    groupby('Monitoring ID')\
    [['pH', 'SAL (ppt)', 'Temperature (°C)', 'DO (mg/L)']].min()

等等......但是我不知道如何把所有的都整合到一张漂亮的table里

bmp9r5qi

bmp9r5qi1#

您可以按照建议使用groupby_describe,然后使用stack_transpose

metrics = ['count', 'mean', 'std', 'min', 'max']
out = df.groupby('Monitoring ID').describe().stack().T.loc[:, (slice(None), metrics)]
>>> out

Monitoring ID    Groundwater                                   Surface Water                                  
                       count       mean       std   min    max         count       mean       std   min    max
pH                     159.0   6.979182  0.587316  6.00   7.98         141.0   6.991135  0.564097  6.00   7.99
SAL (ppt)              159.0   1.976226  0.577557  1.02   2.99         141.0   1.917589  0.576650  1.01   2.99
Temperature (°C)       159.0  13.466101  4.805317  4.13  21.78         141.0  13.099645  4.989240  4.03  21.61
DO (mg/L)              159.0   1.984277  0.609071  1.00   2.99         141.0   1.939433  0.577651  1.00   2.96
sirbozc5

sirbozc52#

您可以将agggroupby沿着使用:

import pandas as pd
import numpy as np

# Sample data
data = {'Date': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-01', '2022-01-02', '2022-01-03'],
        'Monitoring ID': ['Surface Water', 'Surface Water', 'Surface Water', 'Groundwater', 'Groundwater', 'Groundwater'],
        'pH': [7.1, 7.2, 7.5, 7.8, 7.6, 7.4],
        'Temp': [10, 12, 9, 15, 13, 14],
        'Salinity': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]}
df = pd.DataFrame(data)

# Group by 'Monitoring ID' and calculate summary statistics
summary_stats = df.groupby('Monitoring ID').agg({'pH': ['min', 'max', 'mean', 'std'],
                                                'Temp': ['min', 'max', 'mean', 'std'],
                                                'Salinity': ['min', 'max', 'mean', 'std']})

# Reorganise column by renaming
summary_stats.columns = ['_'.join(col).strip() for col in summary_stats.columns.values]

# Summary table
print(summary_stats)

对不起,我仍然在试图弄清楚如何在这里演示代码的输出,但我希望这能有所帮助。

相关问题