別の列パンダデータフレームに基づいて列値を抽出する


109

ある変数の値を別の変数で条件付けして抽出することに行き詰まっています。たとえば、次のデータフレーム:

A  B
p1 1
p1 2
p3 3
p2 4

Aいつ値を取得できB=3ますか?の値を抽出するたびにA、文字列ではなくオブジェクトを取得しました。


なるほど、item()最後に追加します。
Anderson Zhu

df.queryそしてpd.eval、このユースケースのために良いフィットのように見えます。pd.eval()関数のファミリー、その機能、および使用例については、pd.eval()を使用したパンダでの動的式評価をご覧ください。
cs95 2018

回答:


193

を使用locして、条件を満たすシリーズilocを取得してから、最初の要素を取得できます。

In [2]: df
Out[2]:
    A  B
0  p1  1
1  p1  2
2  p3  3
3  p2  4

In [3]: df.loc[df['B'] == 3, 'A']
Out[3]:
2    p3
Name: A, dtype: object

In [4]: df.loc[df['B'] == 3, 'A'].iloc[0]
Out[4]: 'p3'

24
ご協力いただきありがとうございます。df.loc[df['B'] == 3, 'A'].item()私もうまくいきます。
アンダーソン

3
データフレームの列Bに複数の「3」のエントリがある場合、どちらを選択しますか?
サブハッシュ2018年

1
df.loc [DF [ "Condition_Column"] == 0、( "COLUMN_1"、「COLUMN_2、 "Column_3"、 "Column_4は")]私の作品の例を選択し、複数の列のために彼らはタプルでなければなりません。。。
ムスタファUçar

df.loc [df ['B'] == 300の場合、 'A']。iloc [0]は何が出力されるかを意味しますか?
user1999109

.item()は非推奨になり、削除される予定です。これを行う別の方法はありますか?クエリに.locメソッドで返される列またはデータ型の名前には興味がありません。
ダン

39

query入力を減らすことができるを試すことができます。

df.query('B==3')['A']

クエリは興味深いものです。より複雑な句を追加することもできます
Samir Baid

1
私見、これが最良の答えです。
NLR

27

df[df['B']==3]['A']、dfがあなたのpandas.DataFrameであると仮定します。


この方法がパンダの公式ドキュメントに記載されているリンクを教えていただけませんか?
vasili111

][一部を意味します。
vasili111

11

df[df['B']==3]['A'].valuesかっこなしでアイテム自体が必要な場合に使用します


この方法がパンダの公式ドキュメントに記載されているリンクを教えていただけませんか?][一部を意味します。
vasili111

結果は[]で返されます
Sid

[0]値にアクセスするには、最後に置く必要があります。
rubebop

0
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()

私はまた、私の割り当てのために、このクラージングと抽出の操作に取り組みました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.