Add/Modify Pandas DataFrame 的索引
Add/Modify index of Pandas DataFrame
我有一个多索引 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
索引更改为常规列并在之后应用乘法,但我想知道是否有更好的方法来做到这一点?
您可以使用 get_level_values
, rename
and multiple it first and then use 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
我有一个多索引 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
索引更改为常规列并在之后应用乘法,但我想知道是否有更好的方法来做到这一点?
您可以使用 get_level_values
, rename
and multiple it first and then use 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