python - Python 中的数据整理以创建列表
问题描述
我在下面的 Python 中有一个数据框:
import pandas as pd
df = pd.DataFrame({
'CRDACCT_DLQ_CYC_1_MNTH_AGO' : [3, 2, 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C'],
'CRDACCT_DLQ_CYC_2_MNTH_AGO': [4, 3, 3, 3, 3, 3, 2, 0, 5, 4, 3, 2, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2],
'CRDACCT_DLQ_CYC_3_MNTH_AGO': [8, 7, 6, 5, 4, 3, 2, 'F', 'F', 0, 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'F', 'C', 'C', 'F', 'F'],
'CRDACCT_DLQ_CYC_4_MNTH_AGO' : [0, 2, 'F', 'F', 'C', 'C', 'C', 'C', 0, 2, 0, 2, 0, 2, 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'F', 'C', 'F'],
'CRDACCT_DLQ_CYC_5_MNTH_AGO' : [2, 2, 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C'],
'CRDACCT_DLQ_CYC_6_MNTH_AGO' : [2, 2, 2, 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 0, 2, 0, 2, 0],
'CRDACCT_DLQ_CYC_7_MNTH_AGO' : [3, 3, 2, 'C', 'C', 'C', 'F', 0, 6, 5, 4, 3, 2, 2, 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C'],
'CRDACCT_DLQ_CYC_8_MNTH_AGO' : [5, 4, 4, 3, 3, 2, 3, 2, 2, 2, 1, 2, 0, 2, 'C', 'C', 0, 2, 2, 2, 'C', 'C', 0, 'Z'],
'CRDACCT_DLQ_CYC_9_MNTH_AGO' : [2, 2, 'C', 0, 2, 0, 2, 'C', 'C', 'C', 'C', 'C', 0, 3, 2, 'C', 'F', 'C', 'F', 'F', 'F', 'F', 'F', 'F'],
'CRDACCT_DLQ_CYC_10_MNTH_AGO' : [5, 4, 3, 2, 3, 2, 0, 2, 0, 2, 'C', 'C', 'F', 2, 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'C'],
'CRDACCT_DLQ_CYC_11_MNTH_AGO' : [4, 3, 2, 'F', 2, 0, 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z'],
'CRDACCT_DLQ_CYC_12_MNTH_AGO' : ['F', 8, 7, 6, 5, 4, 3, 2, 'C', 'C', 'C', 0, 2, 'C', 'C', 0, 2, 0, 3, 2, 'C', 'C', 'F', 2]
})
df.head()
我想将这些值(字符串值:C、F 和 Z)转换为具有以下条件的某些类别:如果 CRDACCT_DLQ_CYC_1_MNTH_AGO、CRDACCT_DLQ_CYC_2_MNTH_AGO、.......、CRDACCT_DLQ_CYC_12_MNTH_AGO 列中的值包含:
C = -1
F = -2
Z = -3
else value = value
然后我转置表格以识别自 Dlq (MSD) 以来的月份。
dfT =pd.DataFrame(df.T).reset_index(inplace=False)
dfT
我想创建一个名为 MSD 的列表。如果 MSD大于 1(值 > 1),则为值标识 MSD 。例如,在索引 2 中CRDACCT_DLQ_CYC_1_MNTH_AGO = C
或更改后 = -1 不大于 1。那么,检查CRDACCT_DLQ_CYC_2_MNTH_AGO
是否大于 1?CRDACCT_DLQ_CYC_2_MNTH_AGO = 3
大于 1。因此,MSD is 2
因为它在CRDACCT_DLQ_CYC_2_MNTH_AGO
. 用于识别的详细流程图和概览表。
MSD 值介于 1 和 12 之间,取决于i
, 。
所以最终结果是一个有 24 个值的 MSD 列表,为每个索引 0 -23 标识。CRDACCT_DLQ_CYC_i_MNTH_AGO
for i = 1,2,3,...,12
解决方案
是否符合您的要求:
# From your dataframe
MSD = df.T.apply(pd.to_numeric, errors='coerce').ge(1).idxmax(axis=0) \
.str.extract(r'CYC_(\d+)_MNTH', expand=False).astype(int).tolist()
print(MSD)
# Output:
[1, 1, 2, 2, 2, 2, 2, 8, 2, 2, 2, 2, 7, 2, 2, 2, 2, 2, 2, 8, 2, 2, 6, 2]
推荐阅读
- apex - 实例化规则时出错:找不到类异常
- c# - 如何使用 Xunit 在 ASP.net 中对 [System.Web.Http.Authorize] 过滤器进行单元测试
- automation - 由于 chromedriver 版本使用不正确,Vividus 测试未开始
- python - 如何将 Shapely 几何图形保存到文件中并稍后将其加载到变量中
- python - 如何使用 SQLAlchemy 在 PostgreSQL JSON 字段中的 JSON 数组中选择包含给定值的记录?
- xamarin - Firebase Messaging causes crash
- python - 有效地将迭代器输出复制到 numpy 数组的切片
- qliksense - 在 Qliksense 中将具有不同交替状态的两个条形图设置为相同的 y 轴范围
- database - 在数据库中存储图像/文件路径;以 / (正斜杠)开头还是没有?
- c++ - 虚幻引擎 C++ Spawn Actor 错误