[英]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.