比较数据帧的值为“ PO”,“ GO”等的两个字符串列,并创建值为“ High”,“ Low”和“ No Change”的第三列

时间:2019-12-26 14:27:27

标签: python pandas pyspark pyspark-dataframes

我在数据框中有两列。第一列被命名为previous_code,第二列被命名为New_code。这些列的值分别为“ PO”,“ GO”,“ RO”等。这些代码具有优先级,例如,“ PO”的优先级高于“ GO”。我想比较这两列的值,并将输出放在新列中为“高”,“低”和“不变”,以防两列具有相同的代码。以下是数据框外观的示例

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或Pandas中为此编写演示代码,将会很有帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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