正确访问具有重复索引值的切片

时间:2017-11-28 11:42:45

标签: pandas indexing

我有一个带有索引的数据框,有时包含具有相同索引值的行。现在我想切割该数据帧并根据行索引设置值。

考虑以下示例:

import pandas as pd

df = pd.DataFrame({'index':[1,2,2,3], 'values':[10,20,30,40]})
df.set_index(['index'], inplace=True)

df1 = df.copy()
df2 = df.copy()

#copy warning
df1.iloc[0:2]['values'] = 99
print(df1)

df2.loc[df.index[0:2], 'values'] = 99
print(df2)

df1是预期的结果,但是给了我一个SettingWithCopyWarning。 df2似乎是doc提供的访问方式,但是给了我错误的结果(因为索引重复)

是否有一种“正确”的方法可以正确设置这些值并显示重复的索引值?

1 个答案:

答案 0 :(得分:2)

如果索引重复,则不建议使用

.loc。所以你必须选择基于位置的选择iloc。由于我们需要传递位置,因此我们必须使用get_loc来获取列的位置:

print (df2.columns.get_loc('values'))
0

df1.iloc[0:2, df2.columns.get_loc('values')] = 99
print(df1)
       values
index        
1          99
2          99
2          30
3          40