【问题标题】:Create subcolumns in pandas dataframe python在熊猫数据框python中创建子列
【发布时间】:2019-06-07 09:23:25
【问题描述】:

我有一个包含多列的数据框

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

但是如何创建这个子列呢?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

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

    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
    

    您不能在 pandas 中为选定列设置“子列”。如果一列具有“子列”,则所有其他列也必须具有“子列”。它被称为多索引。

    【讨论】:

    • 我可以通过多索引来获得这种结构,其中我的权重在顶部和中位数,在它的下方均值?
    • 是的,你可以,但是你也必须有气缸和马力的二级索引。将列称为“mean_weight”和“median_weight”可能更容易。
    猜你喜欢
    • 2017-08-27
    • 2016-08-28
    • 1970-01-01
    • 2019-12-21
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多