Python 如何基于其他列值重命名数据帧索引标签

Python 如何基于其他列值重命名数据帧索引标签,python,pandas,Python,Pandas,我有一个df,我正试图根据同一行上的列的值更新multiIndex中一些标签的值 目前,我降低了索引级别,并使用了一些掩蔽,就好像它是一个值列一样,但我觉得必须有一种更干净的方法来实现这一点 iterables=[['bar',baz',foo',qux'],['A',B']] index=pd.MultiIndex.from_product(iterables,name=['loadcase','location']) df=pd.DataFrame(np.random.randn(8,3),

我有一个df,我正试图根据同一行上的列的值更新multiIndex中一些标签的值

目前,我降低了索引级别,并使用了一些掩蔽,就好像它是一个值列一样,但我觉得必须有一种更干净的方法来实现这一点

iterables=[['bar',baz',foo',qux'],['A',B']]
index=pd.MultiIndex.from_product(iterables,name=['loadcase','location'])
df=pd.DataFrame(np.random.randn(8,3),index=index,columns=['fx','fy','fz']))
df
fx fy fz
装载箱位置
钢筋A-3.8e-01 2.3e-01-2.3e+00
B-1.4e+00-7.4e-01 2.6e-01
baz A 1.1e+00-1.1e+00-1.2e-01
B 5.6e-01 3.7e-01 2.8e+00
foo A 6.2e-02-6.2e-02-9.7e-01
B-5.7e-01-6.4e-01-1.1e+00
qux A 2.5e+00-1.0e-01 4.1e-02
B-9.2e-01 9.8e-02-1.0e+00
#删除索引位置,以便轻松搜索。
df.reset_索引(level=“location”,inplace=True)
掩码=(df[“位置”]='A')&(df[“fx”]<0)
df[“location”].loc[mask]=“{}\u NEG”.format('A'))
mask2=df[“位置”]=“A”
df[“location”].loc[mask2]=“{}\u POS.format('A'))
#像标准一样返回索引
df.reset_索引(原地=真)
df.set_索引([“loadcase”,“location”],inplace=True)
这给了我预期的结果:

fx fy fz
装载箱位置
巴内-3.8e-01 2.3e-01-2.3e+00
B-1.4e+00-7.4e-01 2.6e-01
巴兹A_位置1.1e+00-1.1e+00-1.2e-01
B 5.6e-01 3.7e-01 2.8e+00
foo A_位置6.2e-02-6.2e-02-9.7e-01
B-5.7e-01-6.4e-01-1.1e+00
qux A_位置2.5e+00-1.0e-01 4.1e-02
B-9.2e-01 9.8e-02-1.0e+00
但是它非常难看,我不想把索引放在一个常规列上。如何屏蔽数据帧,同时访问标签(或特定列)以更改值

此外,我还通过CopyWarning获得了错误设置: 试图在数据帧切片的副本上设置一个值,但在查看数据帧之后,仍然无法从中理解该值


谢谢

我终于用DataFrame解决了这个问题。rename()函数

我终于用DataFrame解决了这个问题。rename()函数

您的数据框有两列名为
fx
。当您使用值
fx
来更改内容时,这可能非常危险。更新了打字错误,应该是fzindice不可变的。您的数据框有两列,分别命名为
fx
。当您使用值
fx
来更改内容时,这可能非常危险。更新了输入错误,应该是fzindice,因为它们是不可变的