2017-11-28 4 views
1

동일한 인덱스 값을 가진 행을 포함하는 인덱스가있는 데이터 프레임이 있습니다. 이제 해당 데이터 프레임을 슬라이스하고 행 인덱스를 기반으로 값을 설정하려고합니다.중복 된 인덱스 값이있는 슬라이스에 대한 올바른 액세스

는 다음과 같은 예를 생각해

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는 문서에서 액세스 할 때 제안되는 방법 인 것처럼 보이지만 (중복 색인 때문에) 잘못된 결과를 나타냅니다.

중복 된 색인 값으로 올바르게 값을 설정하는 적절한 방법이 있습니까? ?

답변

1

.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 
+0

@Bharath - 감사합니다. – jezrael

+1

아무 걱정 안해도 좋은 하루 보내세요 :) – Dark

+1

spot on, thanks :) –