Untitled

 avatar
unknown
plain_text
a year ago
3.5 kB
7
Indexable
Tentu saja! Di sini saya menyertakan kode untuk fungsi `mergeKRIVAPT` yang mengambil parameter `excelPT`, `excelVA`, `sheetPT`, dan `sheetVA` dengan default isi dari `sheetVA` dan `sheetPT` seperti yang Anda sebutkan. Fungsi ini akan membaca kedua file Excel dan menggabungkan nilai-nilai numerik di beberapa sheet yang telah ditetapkan, dan kemudian menyimpannya ke dalam file Excel baru dengan nama dan sheet yang baru.

```python
import pandas as pd

def mergeKRIVAPT(excelPT, excelVA, sheetPT=["EXTERNAL FACING Systems", "CRITICAL Systems (Internal)", "OTHER INTERNAL Systems"], sheetVA=["KRI External", "KRI Critical", "KRI Internal"]):
    # Load both Excel files
    df_pt = pd.read_excel(excelPT, sheet_name=sheetPT, header=None)
    df_va = pd.read_excel(excelVA, sheet_name=sheetVA, header=None)
    
    # Initialize a dictionary to store merged dataframes
    merged_data = {}
    
    # Define the ranges to be added for each sheet pair
    ranges = {
        "KRI External": "B2:G6",
        "KRI Critical": "B2:G6",
        "KRI Internal": "B2:H6",
    }
    
    # Iterate over the sheet names and ranges
    for va_sheet, pt_sheet in zip(sheetVA, sheetPT):
        va_range = ranges.get(va_sheet)
        if va_range:
            # Convert range string into row and column indices
            start_col, start_row = va_range[0], int(va_range[1])
            end_col, end_row = va_range[-2], int(va_range[-1])
            start_col_idx = ord(start_col) - ord('A')
            end_col_idx = ord(end_col) - ord('A')
            
            # Read the specified range from both sheets
            va_data = df_va[va_sheet].iloc[start_row-1:end_row, start_col_idx:end_col_idx+1]
            pt_data = df_pt[pt_sheet].iloc[start_row-1:end_row, start_col_idx:end_col_idx+1]
            
            # Initialize a new DataFrame for the merged data
            merged_df = df_va[va_sheet].copy()
            
            for r in range(start_row-1, end_row):
                for c in range(start_col_idx, end_col_idx+1):
                    if pd.api.types.is_numeric_dtype(va_data.iloc[r-start_row+1, c-start_col_idx]) and pd.api.types.is_numeric_dtype(pt_data.iloc[r-start_row+1, c-start_col_idx]):
                        merged_df.iat[r, c] = va_data.iat[r-start_row+1, c-start_col_idx] + pt_data.iat[r-start_row+1, c-start_col_idx]
            
            # Store merged DataFrame
            merged_data[va_sheet + " Merged"] = merged_df

    # Ensure Severity column is retained
    merged_data["KRI Internal Merged"]['Severity'] = df_va["KRI Internal"].get('Severity', None)

    # Save to a new Excel file
    with pd.ExcelWriter("processed_merged_KRIVAPT.xlsx") as writer:
        for sheet_name, data in merged_data.items():
            data.to_excel(writer, sheet_name=sheet_name, index=False)

# Contoh pemanggilan fungsi
mergeKRIVAPT('excelPT.xlsx', 'excelVA.xlsx')
```

Kode tersebut akan melakukan hal-hal sebagai berikut:
1. Membaca file Excel `excelPT` dan `excelVA` sesuai dengan sheet-sheet yang disediakan atau default.
2. Mengidentifikasi rentang sel yang ingin dijumlahkan berdasarkan lembar masing-masing.
3. Menambahkan nilai-nilai yang relevan dari kedua lembar, menyimpan hasilnya dalam struktur data baru.
4. Memastikan bahwa kolom "Severity" dari `excelVA` disertakan di hasil merge.
5. Menyimpan output ke file Excel baru dengan nama `processed_merged_KRIVAPT.xlsx` dengan nama sheet yang diubah menjadi ["KRI External Merged", "KRI Critical Merged", "KRI Internal Merged"].
Editor is loading...
Leave a Comment