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.


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'

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']

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.


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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.