如何展平 Pandas Dataframe 列级别?

问题描述 投票:0回答:1

我在 Pandas 中使用了

.agg()
并获得了嵌套列。

data.groupby(["plant_id", "plant_name", "scientific_name"],
             as_index=False).agg(["mean", "std", "min", "max"])

如何展平列标签/级别?下面的代码不起作用。

flat_cols = ['plant_id', 'plant_name', 'scientific_name'] + [
             param+"_"+metric for metric in ["mean", "std", "min", "max"]
             for param in ['soil_moisture', 'temperature']]

data.columns = flat_cols
python pandas dataframe
1个回答
0
投票

以下是如何执行此操作的示例。我创建了一个与您的列匹配的数据框的简单示例:

import pandas as pd
import numpy as np

data = pd.DataFrame({
    'plant_id': [1, 1, 2, 2],
    'plant_name': ['Sunflower', 'Sunflower', 'Rose', 'Rose'],
    'scientific_name': ['Helianthus', 'Helianthus', 'Rosa', 'Rosa'],
    'soil_moisture': [20, 30, 40, 50],
    'temperature': [70, 75, 80, 85]
})

grouped = data.groupby(["plant_id", "plant_name", "scientific_name"], as_index=False).agg({
    'soil_moisture': ['mean', 'std', 'min', 'max'],
    'temperature': ['mean', 'std', 'min', 'max']
})

grouped.columns = ['_'.join(col).strip() if type(col) is tuple else col for col in grouped.columns.values]

print(grouped)

这给出了

   plant_id_ plant_name_ scientific_name_  soil_moisture_mean  \
0          1   Sunflower       Helianthus                25.0   
1          2        Rose             Rosa                45.0   

   soil_moisture_std  soil_moisture_min  soil_moisture_max  temperature_mean  \
0           7.071068                 20                 30              72.5   
1           7.071068                 40                 50              82.5   

   temperature_std  temperature_min  temperature_max  
0         3.535534               70               75  
1         3.535534               80               85  
© www.soinside.com 2019 - 2024. All rights reserved.