【问题标题】:Create new column from specific rows in pandas dataframe从熊猫数据框中的特定行创建新列
【发布时间】:2017-10-26 06:06:11
【问题描述】:

我有一个 csv 文件,其中每一行代表一个属性,后跟可变数量的反映属性中房间的后续行。我想为每个属性创建一个列,汇总每个房间的总建筑面积。数据的非结构化性质使得这在pandas 中难以实现。这是我目前拥有的表格的示例:

id  ba  store_desc      floor_area
0   1   Toy Shop        NaN
1   2   Retail Zone A   29.42
2   2   Retail Zone B   31.29
3   1   Grocery Store   NaN
4   2   Retail Zone A   68.00
5   2   Outside Garden  83.50
6   2   Office          7.30

这是我要创建的表:

id  ba  store_desc      floor_area   gross_floor_area
0   1   Toy Shop        NaN          60.71
3   1   Grocery Store   NaN          158.8

是否有人对如何实现此结果有任何指示?我完全迷路了。

山姆

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    IIUC

    df1=df[df['floor_area'].isnull()]
    
    df1['gross_floor_area']=df.groupby(df['floor_area'].isnull().cumsum())['floor_area'].sum().values
    
    df1
    Out[463]: 
       id  ba    store_desc  floor_area  gross_floor_area
    0   0   1       ToyShop         NaN             60.71
    3   3   1  GroceryStore         NaN            158.80
    

    【讨论】:

      【解决方案2】:

      首先创建了一个名为 category 的临时列,然后我将其向前填充,按该列分组以获得总和,然后将其映射回相关的 store_desc 值。

      df['category'] = df[df.floor_area.isnull()]['store_desc']
      
      df['category'].fillna(method='ffill',inplace=True)
      
      df['gross_floor_area'] = df.store_desc.map(df.groupby('category').sum().floor_area)
      
      df.drop('category',axis=1,inplace=True)
      
      df[df.gross_floor_area.notnull()]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-28
        • 2019-10-08
        • 2016-07-30
        • 1970-01-01
        • 2020-09-25
        • 2016-08-07
        • 2022-09-24
        相关资源
        最近更新 更多