Operasi pada kerangka data pandas antara nilai kolom/baris tertentu

Baru mengenal panda, saya mencoba mengelola beberapa operasi kerangka data dengan panda di mana saya memiliki 4 kolom pada kerangka data multi-indeks dan di mana saya memerlukan kolom tambahan yang nilai di kolom itu akan sama dengan nilai dalam satu baris dibagi dengan baris tertentu.

Dalam contoh saya di bawah ini, saya ingin setiap entri memiliki kolom baru "Agg" yang merupakan hasil kolom "Nilai" untuk setiap Jenis (1, 2, 3) dibagi dengan "Nilai" untuk Calc.

        Date        Values  Agg
2016-01-01  Type 1    17     1.7
            Type 2    23     2.3
            Type 3    11     1.1
            Calc      10     1.0
2016-01-02  Type 1    25     0.25
            Type 2    39     0.39
            Type 3    34     0.34
            Calc      100    1.00
2016-01-03  Type 1    20     1.00
            Type 2    9      0.45
            Type 2    12     0.60
            Calc      20     1.00

Dalam kode saya yang sebenarnya, saya memiliki grup berdasarkan "Tanggal" dan indeks lainnya: perubahan ini bergantung pada hasil dari kueri ke db.

Terima kasih sebelumnya !


person John_Mtl    schedule 11.04.2016    source sumber
comment
Maaf, apakah Anda setelah df['Agg'] = df['Values'].div(df['Values'].iloc[-1])?   -  person EdChum    schedule 11.04.2016
comment
Halo Ed, terima kasih atas balasan Anda. Dalam kode saya, saya memiliki beberapa tanggal dan nilai baris Calc untuk masing-masingnya. Saya perlu menemukan cara untuk menyebutkan bahwa saya menginginkan nilai spesifik untuk pembagian untuk tanggal tertentu di indeks.   -  person John_Mtl    schedule 11.04.2016
comment
Bisakah Anda menyempurnakan pertanyaan Anda untuk menjelaskan dengan lebih baik   -  person EdChum    schedule 11.04.2016
comment
Saya mengedit kode di posting awal. Kerangka datanya sangat besar dengan banyak tanggal; yang ingin saya capai adalah, berapa pun ukuran kerangka datanya, selalu menghitung Tipe n/Calc untuk bidang nilai dan untuk setiap tanggal. Terima kasih atas bantuan Anda!   -  person John_Mtl    schedule 11.04.2016


Jawaban (1)


Kode di bawah ini berfungsi. Saya menghabiskan terlalu banyak waktu untuk menulisnya, jadi saya harus berhenti di situ. Beri tahu saya jika Anda memerlukan penjelasan!

def func(df1):
    idx = df1.index.get_level_values(0)[0]
    df1 = df1.loc[idx]
    return (df1['Values'] / df1.loc['Calc']['Values']).to_frame()

df.groupby(level=0).apply(func)
person IanS    schedule 11.04.2016
comment
Ini berfungsi dengan baik dalam beberapa kasus tetapi saya akhirnya mengisolasi nilai dan menambahkan extra_column untuk kode saya sehingga saya menghindari beberapa kesalahan perselisihan data. Terima kasih! - person John_Mtl; 13.04.2016