重命名特定行索引而不影响重复项(Pandas)

w41d8nur  于 2023-01-07  发布在  其他
关注(0)|答案(1)|浏览(104)

我想更改 Dataframe 中特定行的索引,而其他地方也存在具有相同索引的另一行。
df.rename(index={'old_value':'new_value'})没有帮助,因为它替换了这两个示例。

import numpy as np
import pandas as pd

np.random.seed(42) # Setting seed for reproducibility
df = pd.DataFrame(data=np.random.rand(6,3)) # Creating the dataframe
df.index = ['Adam','Bob','Charlie','David','Adam','Finny'] # Setting a custom index containing a duplicate for "Adam"

print(df)
Original dataframe:

                0         1         2

Adam     0.374540  0.950714  0.731994
Bob      0.598658  0.156019  0.155995
Charlie  0.058084  0.866176  0.601115
David    0.708073  0.020584  0.969910
Adam     0.832443  0.212339  0.181825
Finny    0.183405  0.304242  0.524756

我需要将第二个示例"Adam"更改为"Elise"。
我尝试过使用df.rename(index={'Adam': 'Elise'})的常规方法。
然而,这将用"Elise"替换"Adam"的两个示例,这不是我们想要的。
我想出的一个粗略的解决方案如下:
一个二个一个一个
现在只有第二个示例"Adam"已正确更改为"Elise"。

    • 有没有什么方法可以更直接地完成这一点,而不诉诸于这种粗糙的操作?也许可以使用panda内置的函数/方法?**
b5buobof

b5buobof1#

您可以使用pd.Index.wherepd.Index.duplicated

out = df.set_index(df.index.where(~df.index.duplicated(), "Elise"))
0         1         2
Adam     0.374540  0.950714  0.731994
Bob      0.598658  0.156019  0.155995
Charlie  0.058084  0.866176  0.601115
David    0.708073  0.020584  0.969910
Elise    0.832443  0.212339  0.181825
Finny    0.183405  0.304242  0.524756

请注意,使用此方法时,任何和所有重复项都将被替换为"Elise"(可能导致重复Elise),因此如果您想同时替换不同的重复项,此方法并不合适。

相关问题