我有一个带有非唯一索引的pandas DataFrame,我需要更新其中一行。如果我可以用数字索引它,我可以更新该行,如下所示:
array = np.random.randint(1, 10, (3, 3))
df = pd.DataFrame(array, index=['one', 'one', 'two'], columns=['col1', 'col2', 'col3'])
# df looks like this:
# col1 col2 col3
#one 2 3 6
#one 3 1 5
#two 4 5 2
new_data = pd.Series({'col1': 'new', 'col2': 'new', 'col3': 'new'})
df.iloc[0] = new_data
但如果我不知道行号怎么办?我们只想设置第一行的索引是'一个'。所以,我想使用.loc
找到切片,然后将我的新值分配给第一行。
new_data = pd.Series({'col1': 'new', 'col2': 'new', 'col3': 'new'})
df.loc['one'][0] = new_data
但是,这是使用链式索引的分配,这不是很好。有没有不同的方法来做到这一点?
答案 0 :(得分:1)
您可以使用df.iloc[(df.index == 'one').argmax()]
访问它。
所以你的任务看起来像是:
df.iloc[(df.index == 'one').argmax()] = new_data