首页 > 解决方案 > 如何将列的值转换为行 -dataframgroupby

问题描述

我有一个“借款人个人 ID”和“贷款 ID”表。

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

我想知道哪些贷款属于同一个借款人。所以我“分组”了“BwrPersonalId”和“LoanId”,如下所示。

现在我期待这样。

在此处输入图像描述

这是我的代码,但它不起作用。

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)

我现在该怎么做?还有其他方法可以简化代码吗?非常感谢你的帮助。

标签: python

解决方案


基本上,您需要做的是创建一个临时文件,该临时文件将利用将要排序的数据,以及负责 Id 的名称来根据贷款对 Id 进行排序。

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)

推荐阅读