我有一个多列的数据框

df = pd.DataFrame({"cylinders":[2,2,1,1],
                  "horsepower":[120,100,89,70],
                  "weight":[5400,6200,7200,1200]})


 cylinders horsepower weight
0  2          120       5400
1  2          100       6200
2  1           80       7200
3  1           70       1200


我想创建一个新的数据框,并用圆柱体将两个子列的权重分别用中位数和均值表示。
例:

                        weight
  cylinders horsepower  median  mean
0  1          100       5299    5000
1  1          120       5100    5200
2  2           70       7200    6500
3  2           80       1200    1000


对于我的示例表,我使用了随机值。我无法做到这一点。
 我知道如何获取中位数,并表示其在this stackoverflow问题中的描述。


df.weight.median()
df.weight.mean()
df.groupby('cylinders') #groupby cylinders


但是如何创建此子列?

最佳答案

以下代码片段添加了两个请求的列。它按圆柱对行进行分组,计算重量的平均值和中位数,并将原始数据框和结果合并:

result = df.join(df.groupby('cylinders')['weight']\
           .agg(['mean', 'median']))\
           .sort_values(['cylinders', 'mean']).ffill()
#   cylinders  horsepower  weight    mean  median
#2          1          80    7200  5800.0  5800.0
#3          1          70    1200  5800.0  5800.0
#1          2         100    6200  4200.0  4200.0
#0          2         120    5400  4200.0  4200.0


在熊猫中,选择列不能具有“子列”。如果列具有“子列”,则所有其他列也必须具有“子列”。这称为多索引。

关于python - 在Pandas DataFrame Python中创建子列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54163725/

10-10 06:49