python - 如何将列的值转换为行 -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)
我现在该怎么做?还有其他方法可以简化代码吗?非常感谢你的帮助。
解决方案
基本上,您需要做的是创建一个临时文件,该临时文件将利用将要排序的数据,以及负责 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)
推荐阅读
- c++ - 如何在 VS 2017 中添加带有“快速操作和重构”的静态函数声明?
- observable - 自定义 RxJava Observable 在订阅时不发出任何内容
- python - Python if-else 说明
- python - 网页涂鸦 - 使用 Python 抓取关键字并制作列表
- regex - 这个指令是什么意思
? - node.js - 将 Async/Await 与 node-postgres 一起使用
- sql - 执行 SQL Server 存储过程时出现语法错误
- android - 如何修复“Play商店无法识别'values-ne/strings.xml'文件中的字符串。”
- python - 生成 HMAC SHA256 签名 Python
- c# - Azure IoT Adge BLE 模块 - 用于 linux 容器的 BLE 实现