我在 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
以下是如何执行此操作的示例。我创建了一个与您的列匹配的数据框的简单示例:
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