correct accessing of slices with duplicate index-values present

左心房为你撑大大i 提交于 2021-01-28 05:16:35

问题


I have a dataframe with an index that sometimes contains rows with the same index-value. Now I want to slice that dataframe and set values based on row-indices.

Consider the following example:

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 is the expected result, but gives me a SettingWithCopyWarning. df2 seems to be the suggested way of accessing by the doc, but gives me the wrong result (because of the duplicate index)

Is there a "proper" way to set those values correctly with the duplicate index-values present?


回答1:


.loc is not recommended when you have duplicate index. So you have to go for position based selection iloc. Since we need to pass the positions, we have to use get_loc for getting position of column:

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


来源:https://stackoverflow.com/questions/47530736/correct-accessing-of-slices-with-duplicate-index-values-present

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!