pandasデータフレームから特定の行を系列として取得する

フィルタリングされた特定の行をシリーズとして取得するには?

データフレームの例

>>> df = pd.DataFrame({'date': [20130101, 20130101, 20130102], 'location': ['a', 'a', 'c']})
>>> df
       date location
0  20130101        a
1  20130101        a
2  20130102        c

locationc` である行を選択する必要があります。

**試してみました。

row = df[df["location"] == "c"].head(1)  # gives a dataframe
row = df.ix[df["location"] == "c"]       # also gives a dataframe with single row

いずれの場合も、行をシリーズにすることはできません。

ソリューション

squeeze`]1関数を使用して、データフレームから次元を1つ削除する:

df[df["location"] == "c"].squeeze()
Out[5]: 
date        20130102
location           c
Name: 2, dtype: object

DataFrame.squeeze メソッドは read_csv 関数の squeeze 引数を True に設定したときと同じように動作します: 結果のデータフレームが 1-len データフレームである場合、つまり 1 つの次元 (列または行) しかない場合、オブジェクトは小さい次元のオブジェクトに縮小されます。

あなたの場合、DataFrameからSeriesオブジェクトを取得します。同じロジックが、Panel を DataFrame に絞り込む場合にも適用されます。

あなたのコードでは、squeeze が明示されており、オブジェクトの寸法をより小さい寸法に投影することができるため、手元のオブジェクトを "castdown"する意図が明確に示されています。

データフレームに複数の列や行がある場合、squeeze は何の効果も持ちません。

解説 (5)

整数のインデックス(iloc()関数)で最初の行を取るだけです:

>>> df[df["location"] == "c"].iloc[0]
date        20130102
location           c
Name: 2, dtype: object
解説 (2)