Saya memiliki tabel "ID Pribadi Peminjam" dan "ID Pinjaman".

BwrPersonld LoanId
113225  16330
113225  27073
113225  68842
113253  16341
113269  16348
113285  16354
113289  26768
113297  16360
113299  16361
113319  16369
113418  16403
113418  26854

Saya mencoba untuk mengetahui pinjaman mana yang dimiliki oleh peminjam yang sama. Jadi saya "groupby" dengan "BwrPersonalId" dan "LoanId" seperti di bawah ini.

Sekarang saya mengharapkan seperti ini.

enter image description here

Ini kode saya, tetapi tidak berfungsi.

grouped = pd.DataFrame()
unique = loan['BwrPersonId'].unique()
grouped['BwrPersonId'] = ''*len(loan['BwrPersonId'].unique())
grouped['Loan1'] = ''
grouped['Loan2'] = ''
grouped['Loan3'] = ''
grouped['Loan4'] = ''
grouped['Loan5'] = ''
grouped.iloc[:,0] = unique
for i in grouped.index:
    idloan = loan.loc[loan['BwrPersonId'] == unique[i], 'LoanId']
    grouped.iloc[i,1:len(idloan)+1] = idloan
    print(i)

Bagaimana saya bisa melakukannya sekarang? Dan apakah ada cara lain yang dapat menyederhanakan kode? Terima kasih banyak atas bantuan Anda.

0
econofutmist 2 September 2020, 20:47

1 menjawab

Jawaban Terbaik

Pada dasarnya, yang perlu Anda lakukan adalah membuat temp yang akan memanfaatkan data yang akan disortir, dan nama yang akan bertanggung jawab atas Id untuk mengurutkan Id sesuai dengan pinjaman.

import pandas as pd
import numpy as np
from collections import defaultdict
from itertools import count

dict = defaultdict(count)
id, name = pd.factorize([*zip(grouped.id, grouped.name)])
joined = np.array([next(dict[x]) for x in id])
lenOfr, Max = len(name), joined.max() + 1
temp = np.empty((lenOfr, Max), dtype=np.object)
temp[id, joined] = grouped.LoanId
df1 = pd.DataFrame(name.tolist(), columns=['BwrPersonId'])
df2 = pd.DataFrame(temp, columns=['Loan1', 'Loan2', 'Loan3', 'Loan4', 'Loan5'])
final = df1.join(df2)
1
Shufi123 2 September 2020, 18:17