我有一个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
有没有人对如何实现这个结果有任何指示?我完全迷失了。
萨姆
答案 0 :(得分:3)
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
答案 1 :(得分:1)
首先创建一个名为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()]