gpt4 book ai didi

python - 使用不同的键在 Pandas 中垂直堆叠多个数据帧

转载 作者:行者123 更新时间:2023-12-01 13:13:04 24 4
gpt4 key购买 nike

我在 Pandas 中有一个数据框,如下所示 -

import pandas as pd
data = {'Category': ['cat2','cat1','cat2','cat1','cat2','cat1','cat2','cat1','cat1','cat1','cat2'],
'values': [1,2,3,1,2,3,1,2,3,5,1]}
my_data = pd.DataFrame(data)

我得到了每个类别值的最小值、最大值和平均值,我还重命名了列名称,如下所示 -

# Get the minimum value for each column
min_agg = my_data.groupby('Category').min().reset_index()
min_agg.columns = [str(col) + '_min' for col in min_agg.columns]

category_min values_min
0 cat1 1
1 cat2 1

# Get the minimum value for each column
max_agg = my_data.groupby('Category').max().reset_index()
max_agg.columns = [str(col) + '_max' for col in max_agg.columns]


category_max values_max
0 cat1 5
1 cat2 3

# Get average value for each column
avg_agg = my_data.groupby('Category').mean().reset_index()
avg_agg.columns = [str(col) + '_avg' for col in avg_agg.columns]


category_avg values_avg
0 cat1 2.666667
1 cat2 1.600000


# count number of zeros
zeros_agg = my_data.groupby('Category')['values'].apply(lambda column: (column == 0).sum()).reset_index()
zeros_agg.columns = [str(col) + '_zeros' for col in zeros_agg.columns]



Category_zeros values_zeros
0 cat1 0
1 cat2 0

现在,我想垂直堆叠这 4 个数据帧以获得具有 8 条记录的最终数据帧,每个数据帧 2 个记录,如下所示 -

category            values
cat1_min 1
cat2_min 1
cat1_max 5
cat2_max 3
cat1_avg 2.666667
cat2_avg 1.600000
cat1_zeros 0
cat2_zeros 0

输出中的第一列显示了对哪个类别应用了何种聚合,第二列显示了相应的值。

如何使用 pandas 执行此操作?

我试过了

vertical_stack = pd.concat([min_agg, max_agg, avg_agg,zeros_agg], axis=0 , keys=['Category_min','Category_max','Category_avg','Category_zeros'])

但它没有给我预期的输出。

此处显示的聚合仅在 1 列上,但我有一个更大的数据集,并且我在许多列上计算此聚合。

最佳答案

您可以使用所需的聚合函数以类别为中心,然后堆叠结果:

r = df.pivot_table(
columns='Category', values='values', aggfunc=['min', 'max', 'mean'])
r.columns = r.columns.map('_'.join)

r.T

values
min_cat1 1.000000
min_cat2 1.000000
max_cat1 5.000000
max_cat2 3.000000
mean_cat1 2.666667
mean_cat2 1.600000

这类似于

r = df.groupby('Category')['values'].agg(['min', 'max', 'mean']).stack() 
r.index = r.index.map('_'.join)

r
cat1_min 1.000000
cat1_max 5.000000
cat1_mean 2.666667
cat2_min 1.000000
cat2_max 3.000000
cat2_mean 1.600000
dtype: float64

关于python - 使用不同的键在 Pandas 中垂直堆叠多个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58809523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com