比较数据框中有值为“PO”、“GO”等的两个字符串列,并创建第三列,其值为“高”、“低”和“无变化”

2024-10-03 09:18:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个数据帧中有两列。第一列被命名为前一个代码,第二列被命名为新代码_代码。这些列的值为“PO”、“GO”、“RO”等。这些代码具有优先级,例如“PO”的优先级高于“GO”。我想比较这两列的值,并将新列中的输出设置为“High”,“Low”和“No Change”表示两列代码相同。下面是dataframe的示例

CustID|previous_code|New_code
345.    | PO.                   | GO
367.    | RO.                   | PO
385.    |PO.                    | RO
455.    |GO.                    |GO

预期输出数据帧

CustID|previous_code|New_code|Change

345.    | PO.                   | GO.            | Low
367.    | RO.                   | PO.            |High
385.    |PO.                    | RO.            |Low
455.    |GO.                    |GO.             |No Change

如果有人能写一个演示代码在pyspark或Pandasthat这将是有益的。你知道吗

提前谢谢。你知道吗


Tags: 数据no代码godataframenewrocode
1条回答
网友
1楼 · 发布于 2024-10-03 09:18:38

如果我正确理解了顺序,这应该可以正常工作:

import pandas as pd
import numpy as np
data = {'CustID':[345,367,385,455],'previous_code':['PO','RO','PO','GO'],'New_code':['GO','PO','RO','GO']}
df = pd.DataFrame(data)
mapping = {'PO':1,'GO':2,'RO':3}
df['previous_aux'] = df['previous_code'].map(mapping)
df['new_aux'] = df['New_code'].map(mapping)
df['output'] = np.where(df['previous_aux'] == df['new_aux'],'No change',np.where(df['previous_aux'] > df['new_aux'],'High','Low'))
df = df[['CustID','previous_code','New_code','output']]
print(df)

输出:

   CustID previous_code New_code     output
0     345            PO       GO        Low
1     367            RO       PO       High
2     385            PO       RO        Low
3     455            GO       GO  No change

相关问题 更多 >