2017-11-28 12 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 :) –

関連する問題