2016-07-14 1 views
3

ユニークでないインデックスを持つpandas DataFrameがあり、そのうちの1つを更新する必要があります。ユニークではないインデックスを持つ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 

しかし、私は、行番号がわからない場合はどのような:私は、私は以下のように数値的指標を、可能な場合、行を更新することができるのですか?たとえば、「1」のインデックスを持つ最初の行を設定したいとします。だから、私は.locを使ってスライスを見つけて、新しい値を最初の行に割り当てたいと思っています。

new_data = pd.Series({'col1': 'new', 'col2': 'new', 'col3': 'new'}) 
df.loc['one'][0] = new_data 

ただし、これは連鎖インデックスを使用した割り当てであり、あまり良くありません。これを行う別の方法はありますか?

答えて

1

df.iloc[(df.index == 'one').argmax()]でアクセスできます。

だからあなたの割り当ては、次のようになります。これは確かに私が尋ねた何んが、それは非常に一般化ではありません

df.iloc[(df.index == 'one').argmax()] = new_data 
+0

。最初の行の代わりに '1'のインデックスを持つ_last_行を取得したい場合は、単に 'argmin()'を使うことはできません。これを行うもっと広い方法はありませんか? –

+0

@JJonesはい、**ユニーク**インデックスを作成します。 – piRSquared

+0

@JJones問題は、一致するインデックスのグループ内で選択するためのルールを指定する必要があることです。私は、あなたが一般化したいと思うものを特定するようあなたに挑戦しますか?あなたは特定の試合のn番目をつかむ一般的な方法を望んでいますか?もしそうなら、別の質問をするだろう。この質問は最初の「一つ」を求めた。 – piRSquared

関連する問題