【问题标题】:How to apply value_counts across the index and create new dataframe?如何在索引中应用 value_counts 并创建新的数据框?
【发布时间】:2019-01-14 03:26:59
【问题描述】:

我有以下数据框:

df = pd.DataFrame({
'name': {0: 'Silvers Park', 1: 'Adare Road', 2: 'Cargo Road'}, 
'type_2': {0: 'Secondary', 1: 'Special', 2: 'Secondary'}, 
'type_3': {0: 'Nursery', 1: nan, 2: nan}, 
'type_4': {0: 'Primary', 1: nan, 2: nan}, 
'type_5': {0: nan, 1: nan, 2: nan}, 
'type_6': {0: nan, 1: nan, 2: nan}
})



                       name      type_2     type_3   type_4  type_5 type_6
0                 Silvers Park  Secondary   Nursery  Primary   NaN    NaN
1                  Adare Road     Special      NaN      NaN    NaN    NaN
2                  Cargo Road   Secondary      NaN      NaN    NaN    NaN

期望的结果:

我想转换上述 df,以便显示每条道路的学校类型计数。唯一值(所需的变量)在下面的数据框列中表示。

例如:

                      name     Secondary     Special   Primary  Nursery 
0                 Silvers Park      1           0           1         1 
1                  Adare Road       0           1           0         0
2                  Cargo Road       1           0           0         0 

提前谢谢你。

熊猫 0.23.4

python 3.7.1

【问题讨论】:

  • 数据有一些不一致,所以我已经为您修复了。如果有问题,请回滚并告诉我。
  • 谢谢@coldspeed - 更正有效,我的错字。

标签: python python-3.x pandas dataframe


【解决方案1】:

首先,melt 您的数据,然后使用 pivot_table 进行数据透视:

u = df.melt('name')
u.pivot_table(index='name', columns='value', aggfunc='size', fill_value=0)

value         Nursery  Primary  Secondary  Special
name                                              
Adare Road          0        0          0        1
Cargo Road          0        0          1        0
Silvers Park        1        1          1        0

【讨论】:

    【解决方案2】:

    使用get_dummies 并仅删除NaNs 列,如果可能重复添加sum

    df = (pd.get_dummies(df.set_index('name')
                          .dropna(how='all', axis=1), prefix_sep='',prefix='')
            .sum(axis=1, level=0)
            .reset_index())
    print (df)
               name  Secondary  Special  Nursery  Primary
    0  Silvers Park          1        0        1        1
    1    Adare Road          0        1        0        0
    2    Cargo Road          1        0        0        0
    

    【讨论】:

      猜你喜欢
      • 2019-07-10
      • 2013-07-16
      • 1970-01-01
      • 2012-11-25
      • 2021-09-19
      • 2021-05-10
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多