我在数据框中有两列。第一列被命名为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中为此编写演示代码,将会很有帮助。
谢谢。
答案 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