繁体   English   中英

从Pandas数据框中的特定行创建新列

[英]Create new column from specific rows in pandas dataframe

我有一个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

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

山姆

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

首先创建一个名为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()]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM