Saya melakukan penelitian pada hewan dan menggunakan kotak operan otomatis yang menghasilkan file csv besar, saya memiliki banyak hewan yang menjalankan beberapa sesi per hari dan untuk memahami data saya, saya mengulang beberapa file csv dan mengekstrak data yang relevan ke file excel terpisah. Saya berhasil membuat hampir semua kode dinamis kecuali untuk satu bit penting: Saya harus menetapkan ID subjek ke beberapa rentang baris yang sesuai dengan data subjek itu.

Cara yang saya lakukan saat ini adalah pertama-tama mengekstrak daftar [ID] dari 16 subjek dalam urutan yang dijalankan pada hari itu dan kemudian membuat kolom urutan sesi baru di kerangka data saya yang memberi tahu sesi mana data itu untuk. Kemudian saya membuat kolom 'ID' kosong yang kemudian saya tetapkan secara manual setiap rentang baris dari sesi satu ke elemen pertama dalam daftar [ID], lalu sesi 2 ke elemen kedua dan seterusnya, inilah kodenya contoh:

df['ID'] = 0
df.at[(df['Session'] == 1), 'ID'] = ID[0]
df.at[(df['Session'] == 2), 'ID'] = ID[1]
df.at[(df['Session'] == 3), 'ID'] = ID[2]
df.at[(df['Session'] == 4), 'ID'] = ID[3]
df.at[(df['Session'] == 5), 'ID'] = ID[4]
df.at[(df['Session'] == 6), 'ID'] = ID[5]
df.at[(df['Session'] == 7), 'ID'] = ID[6]
df.at[(df['Session'] == 8), 'ID'] = ID[7]
df.at[(df['Session'] == 9), 'ID'] = ID[8]
df.at[(df['Session'] == 10), 'ID'] = ID[9]
df.at[(df['Session'] == 11), 'ID'] = ID[10]
df.at[(df['Session'] == 12), 'ID'] = ID[11]
df.at[(df['Session'] == 13), 'ID'] = ID[12]
df.at[(df['Session'] == 14), 'ID'] = ID[13]
df.at[(df['Session'] == 15), 'ID'] = ID[14]
df.at[(df['Session'] == 16), 'ID'] = ID[15]

Sampai saat ini ini membantu saya dengan baik, namun nomor n saya telah berubah menjadi 15, sekarang saya memiliki campuran CSV dengan nomor n yang berbeda dan saya mendapatkan kesalahan 'daftar indeks di luar jangkauan' segera setelah loop mencapai n=15 mengajukan. Karena sifat pekerjaan saya, kemungkinan besar angka n akan berubah beberapa kali di masa mendatang, jadi saya ingin menyesuaikan kode saya untuk mengakomodasi itu. Masalah utama saya adalah fakta bahwa saya tidak terbiasa dengan prinsip-prinsip dasar Python, alasannya karena saya perlu maju dengan cepat dari tidak mengetahui cara membuat kode dalam bahasa apa pun hingga mengembangkan skrip saya sendiri yang disesuaikan dengan CSV yang aneh, saya memutuskan untuk Saya akan fokus pada pemahaman panda dan hanya mempelajari bagian-bagian yang secara langsung relevan untuk memecahkan masalah langsung saya dan sayangnya itu harus dibayar dengan tidak dilengkapi untuk menyelesaikan masalah seperti ini...

Saya sudah mencoba berbagai hal yang tidak ada yang berhasil jadi pertanyaan saya adalah bagaimana saya bisa membuat ini dinamis sehingga berfungsi dengan berbagai n angka?

Banyak banyak banyak terima kasih sebelumnya!

0
laquica 25 Mei 2021, 16:43

1 menjawab

Jawaban Terbaik

Anda hanya harus membuat peta dari nomor sesi ke ID.

Dengan asumsi sesi Anda akan selalu diberi nomor mulai dari 1, ini akan berhasil:

SESSION_ID = dict(enumerate(ID, 1))

Maka secara sederhana:

df['ID'] = df['Session'].map(SESSION_ID)
1
juanpa.arrivillaga 25 Mei 2021, 13:53