首页 > 解决方案 > pandas 中的平均值和虚拟值

问题描述

我是python的初学者我有一个dataframe

df
Road_Section    RoadType    Speed   Landuse
Zone1           Local       1.33    Shops
Zone1           National    0.37    Field
Zone1           Collector   0.52    Park
Zone1           National    1.17    Resident
Zone1           Local       1.21    Office
Zone2           Local       0.52    Park
Zone2           Local       1.05    Shops
Zone2           Collector   2.48    Shops

我使用以下代码计算每个区域的速度:

df.groupby("Zone")['speed'].mean()

但是,我找不到如何同时计算每个区域的速度平均值RoadType并将Landuse列更改为虚拟值。1 的虚拟值在区域中,0 不在区域中。

Zone    Average_Speed   Local   National    Collector   Shops   Office  Resident    Park    Field
Zone1   0.92            1       1           1           1       1       1           1       1                  
Zone2   1.35            1       0           1           1       0       0           1       0

有没有人可以帮我怎么做?

标签: pythonpandas

解决方案


DataFrame.set_index首先用.创建索引Road_Section。然后按第一列创建,并加入由withmean创建的另一个 DataFrame :get_dummiesmax

df1 = df.set_index('Road_Section')
mean = df1.pop('Speed').mean(level=0).to_frame('Average_Speed')

df = mean.join(pd.get_dummies(df1, prefix='', prefix_sep='').max(level=0)).reset_index()
print (df)
  Road_Section  Average_Speed  Collector  Local  National  Field  Office  \
0        Zone1           0.92          1      1         1      1       1   
1        Zone2           1.35          1      1         0      0       0   

   Park  Resident  Shops  
0     1         1      1  
1     1         0      1  

推荐阅读