54

これはこの質問とかなり似た質問ですが、重要な違いが 1 つあります。インデックスではなく、いくつかの基準によって変更するデータを選択しています。

適用する基準が単一の行を返す場合、その行の特定の列の値を簡単な方法で設定できると期待していますが、最初の試みはうまくいきません:

>>> d = pd.DataFrame({'year':[2008,2008,2008,2008,2009,2009,2009,2009], 
...                   'flavour':['strawberry','strawberry','banana','banana',
...                   'strawberry','strawberry','banana','banana'],
...                   'day':['sat','sun','sat','sun','sat','sun','sat','sun'],
...                   'sales':[10,12,22,23,11,13,23,24]})

>>> d
   day     flavour  sales  year
0  sat  strawberry     10  2008
1  sun  strawberry     12  2008
2  sat      banana     22  2008
3  sun      banana     23  2008
4  sat  strawberry     11  2009
5  sun  strawberry     13  2009
6  sat      banana     23  2009
7  sun      banana     24  2009

>>> d[d.sales==24]
   day flavour  sales  year
7  sun  banana     24  2009

>>> d[d.sales==24].sales = 100
>>> d
   day     flavour  sales  year
0  sat  strawberry     10  2008
1  sun  strawberry     12  2008
2  sat      banana     22  2008
3  sun      banana     23  2008
4  sat  strawberry     11  2009
5  sun  strawberry     13  2009
6  sat      banana     23  2009
7  sun      banana     24  2009

2009 年の日曜日のバナナの売り上げを 100 に設定しても、何も起こりません! これを行う最も良い方法は何ですか? 理想的には、ソリューションでは行番号を使用する必要があります。通常、事前にわからないためです。

4

3 に答える 3

14

古いバージョンの pandas についてはわかりませんが、0.16 では特定のセルの値を複数の列の値に基づいて設定できます。

@waitingkuo から提供された回答を拡張すると、複数の列の値に基づいて同じ操作を行うこともできます。

d.loc[(d.day== 'sun') & (d.flavour== 'banana') & (d.year== 2009),'sales'] = 100
于 2015-05-13T07:48:46.753 に答える