问题描述
我的数据框是带有许多行和列的pandas数据框df。 现在,我想基于对象列的值创建一个新列(系列)。例如:
df.iloc [0,'oldcolumn']输出为0,应在新列中为我 0 和
df.iloc [1,'oldcolumn']输出为'ab%$。应该在同一新列中给我 5 (文字数量,包括空格)。
此外,有没有办法避免循环或自己的功能? 谢谢你
解决方法
要基于另一列中值的长度创建新列,您应该
WITH extDealer
AS (SELECT thirdPartynumber
FROM ALFAODS.ODSEXTERNALSYSTEMREFERENCE odsExt
INNER JOIN
ALFAODS.OdsThirdParty thirdParty
ON odsExt.THIRDPARTYID = thirdParty.id
WHERE odsExt.reference = :1),selection
AS
( SELECT schedule.maturityDate,schedule.id AS schedule_id,schedule.alfascheduleidentifier AS scheduleId,asset.assetidentifier AS assetId,agreement.agreementNumber AS loanId,proposalStatus.DETAIL AS proposalStatusCode,schedule.scheduleStatus AS scheduleStatus,schedule.terminationDate,(CASE
WHEN supplier.thirdPartyNumber =
thirdPartyDealer.thirdPartyNumber
THEN
TO_CHAR (supplier.thirdPartyNumber)
ELSE
'0'
END)
AS "supplierGPNr",(CASE
WHEN proposalStatus.DETAIL = 'RESERVED'
THEN
'0'
WHEN proposalStatus.DETAIL = 'APPROVED'
THEN
'1'
WHEN proposalStatus.DETAIL = 'FINANCED'
THEN
'2'
WHEN proposalStatus.DETAIL = 'CANCELLED'
THEN
'3'
WHEN proposalStatus.DETAIL = 'PRECANCELLED'
THEN
'3'
WHEN proposalStatus.DETAIL = 'CREDITNOTECANCELLED'
THEN
'3'
WHEN proposalStatus.DETAIL = 'WAITING'
THEN
'4'
ELSE
'5'
END)
AS loanState,productId1.DETAIL AS productId1,productId2.DETAIL AS productId2,productId3.DETAIL AS productId3,productId4.DETAIL AS productId4,productId.DETAIL AS wmProductId,asset.serialNumber AS vin,asset.modelName AS modelName,schedule.totalAssetCostFinanced AS loanAmount,(CASE
WHEN schedule.capitalOutstanding IS NULL
THEN
0
WHEN schedule.scheduleStatus = 'Proposal'
THEN
(CASE
WHEN proposalStatus.DETAIL = 'WAITING' THEN 0
ELSE schedule.capitalOutstanding * (-1)
END)
ELSE
schedule.capitalOutstanding * (-1)
END)
AS balance,thirdPartyDealer.thirdPartyNumber AS dealerGPNr,thirdPartyDealer.name AS dealerNameShort,TO_DATE (
CAST (
CASE
WHEN (creationDate.DATEFIELD = 0) THEN NULL
ELSE creationDate.DATEFIELD
END AS NVARCHAR2 (8)),'yyyymmdd')
AS creationDate,schedule.activationDate AS activationDate,365 AS "KBSTATE",assetValuationInp.narrative AS invoiceId,(CASE
WHEN assetValuationInp.valuation IS NULL THEN 0
ELSE assetValuationInp.valuation
END)
AS invoiceAmount,assetValuationInp.valueDate AS invoiceDate,assetUsageHistory.readingValue AS kilometers,installSchema.DETAIL AS installmentSchemaId,installSchemaVer.DETAIL AS installmentSchemaVersion,interestSchema.DETAIL AS interestSchemaId,interestSchemaVer.DETAIL AS interestSchemaVersion,SUBSTR (asset.serialNumber,-6) AS vinLast6,stockId.DETAIL AS stockId,deliveryLink.DETAIL AS deliveryLink,TO_DATE (
CAST (
CASE
WHEN (deliveryDate.DATEFIELD = 0) THEN NULL
ELSE deliveryDate.DATEFIELD
END AS NVARCHAR2 (8)),'yyyymmdd')
AS deliveryDate,CASE
WHEN UPPER (CONCAT (submitter.thirdPartyNumber,'')) IN
('<NONE>','','NULL')
THEN
0
ELSE
TO_NUMBER (submitter.thirdPartyNumber)
END
AS submitterId,agreementAlert.dunningBlock AS dunningBlock,odsInvoicingCompany.code AS "brandId",odsInvoicingCompany.name AS "brand",agrCompany.id AS "mandantId",modelHSN.DETAIL AS hsn,modelTSN.DETAIL AS tsn,briefNumber.DETAIL AS documentNr,schedule.MATURITYDATE AS finalDate
FROM ALFAODS.OdsScheduleMain schedule
INNER JOIN ALFAODS.OdsAgreement agreement
ON schedule.agreementId = agreement.id
AND agreement.productCode = 'WHS'
INNER JOIN ALFAODS.OdsAsset asset
ON asset.scheduleId = schedule.id
INNER JOIN ALFAODS.OdsThirdParty thirdPartyDealer
ON schedule.invCusId = thirdPartyDealer.id
INNER JOIN ALFAODS.OdsThirdParty submitter
ON schedule.dealerid = submitter.id
JOIN ALFAODS.OdsTmpSystemDate dates
ON 1 = 1
LEFT JOIN ALFAODS.OdsThirdParty supplier
ON supplier.id = asset.supplierId
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS installSchema
ON installSchema.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND installSchema.informationType = 'WINSS'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS interestSchema
ON interestSchema.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND interestSchema.informationType = 'WINTS'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS application
ON application.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND application.informationType = 'WAPID'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS productId1
ON productId1.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND productId1.informationType = 'WPID1'
AND (:2 IS NULL
OR productId1.DETAIL = NVL (:3,productId1.DETAIL))
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS productId2
ON productId2.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND productId2.informationType = 'WPID2'
AND (:4 IS NULL
OR productId2.DETAIL = NVL (:5,productId2.DETAIL))
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS productId3
ON productId3.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND productId3.informationType = 'WPID3'
AND (:6 IS NULL
OR productId3.DETAIL = NVL (:7,productId3.DETAIL))
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS productId4
ON productId4.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND productId4.informationType = 'WPID4'
AND (:8 IS NULL
OR productId4.DETAIL = NVL (:9,productId4.DETAIL))
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS stockID
ON stockID.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND stockID.informationType = 'WSTID'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS proposalStatus
ON proposalStatus.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND proposalStatus.informationType = 'WPRST'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS creationDate
ON creationDate.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND creationDate.informationType = 'WCRDT'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS installSchemaVer
ON installSchemaVer.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND installSchemaVer.informationType = 'WINSV'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS interestSchemaVer
ON interestSchemaVer.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND interestSchemaVer.informationType = 'WINTV'
-- LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS cancellationDate ON cancellationDate.alfaScheduleIdentifier = schedule.alfaScheduleIdentifier AND cancellationDate.informationType = 'WCD'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS deliveryLink
ON deliveryLink.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND deliveryLink.informationType = 'WDLNK'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS productId
ON productId.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND productId.informationType = 'WPRID'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS deliveryDate
ON deliveryDate.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND deliveryDate.informationType = 'WDELD'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS netting
ON netting.alfaScheduleIdentifier =
schedule.alfaScheduleIdentifier
AND netting.informationType = 'WNETT'
LEFT JOIN ALFAODS.OdsAssetValuation assetValuationInp
ON ( assetValuationInp.assetId = asset.id
AND assetValuationInp.valueTypeCode = 'INP'
AND assetValuationInp.isCurrentForTypeAndSource = 1)
LEFT JOIN ALFAODS.OdsAssetUsageHistory assetUsageHistory
ON asset.assetidentifier = assetUsageHistory.assetId
LEFT JOIN ALFAODS.OdsAgreementAlert agreementAlert
ON agreementAlert.agreementId = agreement.id
LEFT JOIN ALFAODS.OdsCompany odsInvoicingCompany
ON odsInvoicingCompany.id = schedule.invCompanyId
LEFT JOIN ALFAODS.OdsCompany agrCompany
ON agrCompany.id = schedule.agrCompanyId
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOASSET modelHSN
ON modelHSN.assetIdentifier = asset.assetidentifier
AND modelHSN.informationType = u'MANUN'
AND modelHSN.DETAIL = NVL (:10,modelHSN.DETAIL)
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOASSET modelTSN
ON modelTSN.assetIdentifier = asset.assetidentifier
AND modelTSN.informationType = u'MODC'
AND modelTSN.DETAIL = NVL (:11,modelTSN.DETAIL)
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOASSET briefNumber
ON briefNumber.assetIdentifier = asset.assetidentifier
AND briefNumber.informationType = u'BNR'
AND briefNumber.DETAIL = NVL (:12,briefNumber.DETAIL)
WHERE (:13 IS NULL
OR SUBSTR (asset.serialNumber,-6) IN
( SELECT REGEXP_SUBSTR (NVL (:14,''),'[^,]+',1,LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR (NVL (:15,LEVEL)
IS NOT NULL))
AND (:16 IS NULL
OR asset.serialNumber IN
( SELECT REGEXP_SUBSTR (NVL (:17,LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR (NVL (:18,LEVEL)
IS NOT NULL))
AND (:19 IS NULL
OR thirdPartyDealer.thirdPartyNumber IN
( SELECT REGEXP_SUBSTR (NVL (:20,LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR (NVL (:21,LEVEL)
IS NOT NULL))
AND (:22 IS NULL
OR supplier.thirdPartyNumber IN
( SELECT REGEXP_SUBSTR (NVL (:23,LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR (NVL (:24,LEVEL)
IS NOT NULL))
AND (:25 IS NULL
OR thirdPartyDealer.thirdPartyNumber IN
(SELECT thirdpartynumber FROM extDealer))
AND (:26 IS NULL
OR UPPER (proposalStatus.DETAIL) IN
( SELECT REGEXP_SUBSTR (NVL (:27,LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR (NVL (:28,LEVEL)
IS NOT NULL))
AND (:29 IS NULL
OR agreement.agreementNumber IN
( SELECT REGEXP_SUBSTR (NVL (:30,LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR (NVL (:31,LEVEL)
IS NOT NULL))
AND (:32 IS NULL OR asset.modelName LIKE '%' || :33 || '%')
AND ( :34 IS NULL
OR assetValuationInp.narrative = :35
OR stockId.DETAIL = :36)
AND (:37 IS NULL
OR productId1.DETAIL = NVL (:38,productId1.DETAIL))
AND (:39 IS NULL
OR productId2.DETAIL = NVL (:40,productId2.DETAIL))
AND (:41 IS NULL
OR productId3.DETAIL = NVL (:42,productId3.DETAIL))
AND (:43 IS NULL
OR productId4.DETAIL = NVL (:44,productId4.DETAIL))
AND ( (:45 IS NULL)
OR assetValuationInp.valueDate >=
TO_DATE (:46,'yyyy-MM-dd'))
AND ( (:47 IS NULL)
OR assetValuationInp.valueDate <=
TO_DATE (:48,'yyyy-MM-dd'))
AND ( (:49 IS NULL)
OR schedule.activationDate >=
TO_DATE (:50,'yyyy-MM-dd'))
AND ( (:51 IS NULL)
OR schedule.activationDate <=
TO_DATE (:52,'yyyy-MM-dd'))
AND (:53 IS NULL
OR modelHSN.DETAIL = NVL (:54,modelHSN.DETAIL))
AND (:55 IS NULL
OR modelTSN.DETAIL = NVL (:56,modelTSN.DETAIL))
AND (:57 IS NULL
OR briefNumber.DETAIL = NVL (:58,briefNumber.DETAIL))
AND (:59 IS NULL
OR (TO_DATE (:60,'yyyy-MM-dd') <= schedule.MATURITYDATE))
AND (:61 IS NULL
OR (schedule.SCHEDULESTATUS = 'Live (Primary)'
AND TO_DATE (:62,'yyyy-MM-dd') >=
schedule.MATURITYDATE
OR schedule.SCHEDULESTATUS = 'Terminated'
AND ADD_MONTHS (
TRUNC (TO_DATE (:63,'yyyy-MM-dd'),'MONTH'),2) >= schedule.MATURITYDATE))
ORDER BY CASE
WHEN UPPER (:64) = 'LOANID' AND UPPER (:65) = 'ASC'
THEN
agreement.agreementNumber
END ASC,CASE
WHEN UPPER (:66) = 'LOANID' AND UPPER (:67) <> 'ASC'
THEN
agreement.agreementNumber
END DESC,CASE
WHEN UPPER (:68) <> 'LOANID' AND UPPER (:69) = 'ASC'
THEN
thirdPartyDealer.thirdPartyNumber
END ASC,CASE
WHEN UPPER (:70) <> 'LOANID' AND UPPER (:71) <> 'ASC'
THEN
thirdPartyDealer.thirdPartyNumber
END DESC
OFFSET :72 ROWS FETCH NEXT :73 ROWS ONLY
),Selection2
AS (
SELECT
LOANID,PROPOSALSTATUSCODE,SCHEDULESTATUS,"supplierGPNr",LOANSTATE,PRODUCTID1,PRODUCTID2,PRODUCTID3,PRODUCTID4,WMPRODUCTID,VIN,MODELNAME,LOANAMOUNT,BALANCE,DEALERGPNR,DEALERNAMESHORT,CREATIONDATE,ACTIVATIONDATE,CASE WHEN (scheduleStatus = 'Live (Primary)') THEN finalDate
ELSE (SELECT max(receivable.dueDate)
FROM ALFAODS.OdsReceivable receivable
INNER JOIN ALFAODS.OdsChargeType chargeType on receivable.recvChargeTypeId = chargeType.id AND chargeType.code = 2
WHERE receivable.scheduleId = schedule_id) END AS CANCELLATIONDATE,KBSTATE,DOCUMENTNR,documentStateLoan.DETAIL as documentStateLoan,loanDocumentLocation.DETAIL as documentLocation,TO_DATE(CAST(CASE WHEN (loanDocumentDate.DATEFIELD = 0) THEN null
ELSE loanDocumentDate.DATEFIELD END AS NVARCHAR2(8)),'yyyymmdd') as documentStatusDate,typeId.DETAIL as schwackeCodes,assetValuation.valuation as schwackeValue,INVOICEID,INVOICEAMOUNT,INVOICEDATE,KILOMETERS,INSTALLMENTSCHEMAID,0 AS INSTALLMENTSCHEMAVERSION,INTERESTSCHEMAID,0 AS INTERESTSCHEMAVERSION,VINLAST6,HSN,TSN,STOCKID,NULL AS DELIVERYLINK,DELIVERYDATE,SUBMITTERID,docRepositary.DETAIL as docRepositaryId,DUNNINGBLOCK,"brandId","brand","mandantId",NULL AS vatDeduction,NULL AS schwackeDeduction,NULL AS ignoreRetention,500 AS TOTAL
FROM selection sel
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS documentStateLoan ON documentStateLoan.alfaScheduleIdentifier = sel.scheduleId AND documentStateLoan.informationType = 'WDCLS' AND documentStateLoan.DETAIL= NVL(:74,documentStateLoan.DETAIL)
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS loanDocumentDate ON loanDocumentDate.alfaScheduleIdentifier = sel.scheduleId AND loanDocumentDate.informationType = 'WCRDT'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS loanDocumentLocation ON loanDocumentLocation.alfaScheduleIdentifier = sel.scheduleId AND loanDocumentLocation.informationType = 'WLDLC' AND loanDocumentLocation.DETAIL = NVL(:75,loanDocumentLocation.DETAIL)
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOS docRepositary ON docRepositary.alfaScheduleIdentifier = sel.scheduleId AND docRepositary.informationType = 'WDRID'
LEFT JOIN ALFAODS.ODSTMPCURRENTMISCINFOASSET typeId ON typeId.assetIdentifier = sel.assetId AND typeId.informationType = u'WTYID'
LEFT JOIN ALFAODS.OdsAssetValuation assetValuation on (
assetValuation.assetId = sel.assetId
AND assetValuation.valueTypeCode = 'TTV'
AND assetValuation.isCurrentForTypeAndSource = 1)
WHERE
(:76 IS NULL OR documentStateLoan.DETAIL = NVL(:77,documentStateLoan.DETAIL))
AND
(:78 IS NULL OR loanDocumentLocation.DETAIL = NVL(:79,loanDocumentLocation.DETAIL))
)
SELECT selection2.CANCELLATIONDATE as FINALDATE,selection2.* FROM selection2
where
scheduleStatus = 'Live (Primary)'
or (scheduleStatus = 'Terminated' and cancellationdate BETWEEN TO_DATE(NVL(:80,'1900-01-01'),'yyyy-MM-dd') AND TO_DATE(NVL(:81,'9999-12-31'),'yyyy-MM-dd'))
尽管这是一种基于现有列中数据创建新列的通用方法,但亨利的方法也是一种不错的方法。
此外,有没有办法避免循环或自己的功能?
我建议您看看How To Make Your Pandas Loop 71803 Times Faster。
,您可以尝试以下方法:
df['strlen'] = df['oldcolumn'].apply(len)
print(df)