【问题标题】:Add/Modify index of Pandas DataFrame添加/修改 Pandas DataFrame 的索引
【发布时间】:2018-01-18 10:49:42
【问题描述】:

我有一个多索引 Pandas DataFrame data,它具有索引 ID 和 Frequency (Hz),列名 Angles。对于每个ID 数据集,Frequency 索引范围从 4 到 1000,步长为 4。

Angles                            1          2          3          4  \
ID             Frequency                                               
11111          4.0              2.1        5.4        3.1        6.4   
               8.0              1.1        7.9        4.5        6.3   
               12.0             5.2        5.1        9.6       11.2
               16.0             6.7        6.1        2.9        7.3   
               20.0             1.1        6.1        4.7        6.9
...                             ...        ...        ...        ...  
11120          992.0            9.2        5.4        2.7        9.2
               996.0            8.1        8.9        3.1        4.5
               1000.0           2.1        1.8        5.5        8.4

我想添加一个额外的Rad/s 索引列,它将Frequency 索引中的每个值乘以 2π,得到如下结果:

Angles                                 1          2          3          4  \
ID          Frequency    Rad/s                                              
11111       4.0          25.1        2.1        5.4        3.1        6.4   
            8.0          50.3        1.1        7.9        4.5        6.3   
            12.0         75.4        5.2        5.1        9.6       11.2
            16.0         100.5       6.7        6.1        2.9        7.3   
            20.0         125.7       1.1        6.1        4.7        6.9
...                                  ...        ...        ...        ...  
11120       992.0        6232.9      9.2        5.4        2.7        9.2
            996.0        6258.1      8.1        8.9        3.1        4.5
            1000.0       6283.2      2.1        1.8        5.5        8.4

我已经考虑将 Frequency 索引更改为常规列并在之后应用乘法,但我想知道是否有更好的方法?

【问题讨论】:

    标签: python pandas indexing multi-index


    【解决方案1】:

    你可以先使用get_level_values,rename,然后再使用set_index和参数append=True:

    new = df.index.get_level_values('Frequency').rename('Rad/s') * 2 * np.pi
    df = df.set_index(new, append=True)
    print (df)
                                   1    2    3     4
    ID    Frequency Rad/s                           
    11111 4.0       25.132741    2.1  5.4  3.1   6.4
          8.0       50.265482    1.1  7.9  4.5   6.3
          12.0      75.398224    5.2  5.1  9.6  11.2
          16.0      100.530965   6.7  6.1  2.9   7.3
          20.0      125.663706   1.1  6.1  4.7   6.9
    11120 992.0     6232.919825  9.2  5.4  2.7   9.2
          996.0     6258.052566  8.1  8.9  3.1   4.5
          1000.0    6283.185307  2.1  1.8  5.5   8.4
    

    【讨论】:

      猜你喜欢
      • 2017-03-11
      • 1970-01-01
      • 2022-01-10
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      相关资源
      最近更新 更多