ekstrak nilai kolom berdasarkan dataframe pandas kolom lain

109

Saya agak terjebak dalam mengekstraksi nilai dari satu pengkondisian variabel pada variabel lain. Misalnya, dataframe berikut:

A  B
p1 1
p1 2
p3 3
p2 4

Bagaimana saya bisa mendapatkan nilai Akapan B=3? Setiap kali saya mengekstrak nilai A, saya mendapat objek, bukan string.

Anderson Zhu
sumber
Begitu, saya harus menambahkan item()di akhir.
Anderson Zhu
df.querydan pd.evalsepertinya cocok untuk kasus penggunaan ini. Untuk informasi tentang pd.eval()keluarga fungsi, fitur, dan kasus penggunaannya, kunjungi Evaluasi Ekspresi Dinamis di panda menggunakan pd.eval () .
cs95

Jawaban:

193

Anda bisa menggunakan locuntuk mendapatkan rangkaian yang memenuhi kondisi Anda dan kemudian ilocuntuk mendapatkan elemen pertama:

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'
Anton Protopopov
sumber
24
Terima kasih atas bantuan Anda. df.loc[df['B'] == 3, 'A'].item()bekerja untuk saya juga.
Anderson Zhu
3
mana yang dipilih jika bingkai data memiliki beberapa entri '3' di kolom B?
subhash
1
df.loc [df ["Condition_Column"] == 0, ("Column_1", "Column_2," Column_3 "," Column_4 ")] berfungsi untuk saya. Contoh ini untuk memilih beberapa kolom. Mereka harus dalam tupel.
Mustafa Uçar
jika df.loc [df ['B'] == 300, 'A']. iloc [0] berarti apa yang akan menjadi keluaran?
pengguna1999109
.item () tampaknya sudah usang dan akan dihapus. Apakah ada cara lain untuk melakukan ini? Saya tidak tertarik dengan nama kolom atau tipe data yang juga dikembalikan dengan metode .loc ke kueri.
Dan
40

Anda bisa mencoba query, yang lebih sedikit mengetik:

df.query('B==3')['A']
PhilChang
sumber
Kueri menarik karena kami dapat menambahkan klausa yang lebih kompleks juga
Samir Baid
1
IMHO, inilah jawaban terbaiknya.
NLR
27

df[df['B']==3]['A'], dengan asumsi df adalah pandas.DataFrame Anda.

dipancarkan
sumber
Bisakah Anda memberi tautan di mana tepatnya metode ini dijelaskan dalam dokumentasi resmi panda?
vasili111
Maksud saya ][bagian.
vasili111
11

Gunakan df[df['B']==3]['A'].valuesjika Anda hanya ingin item itu sendiri tanpa tanda kurung

Baz
sumber
Bisakah Anda memberi tautan di mana tepatnya metode ini dijelaskan dalam dokumentasi resmi panda? Maksud saya ][bagian.
vasili111
Itu mengembalikan hasil dengan []
Sid
Anda masih harus meletakkan [0]di bagian akhir untuk mengakses nilainya.
rubebop
0
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()

Saya juga telah mengerjakan operasi klausa dan ekstraksi ini untuk tugas saya.

Dheeraj Pranav
sumber