<p>您可以使用<code>ffill</code>和<code>map</code>来跟踪您的每个标准及其结果</p>
<pre><code>response_rules = {
"c_approved": "approved",
"c_rejected": "rejected",
"a_approved": "revised",
"a_rejected": "rejected"
}
df["final_status"] = df.ffill(axis=1)["status_3"].map(response_rules)
print(df)
status_1 status_2 status_3 final_status
0 a_accepted_with_comment a_revised c_approved approved
1 a_accepted_with_comment c_rejected NaN rejected
2 a_rejected a_approved NaN revised
3 a_rejected NaN NaN rejected
</code></pre>
<p>如果有很多规则,更好的设计模式可能是保留一个易于阅读/编辑的字典,将结果映射到每个标准,然后在调用<code>.map</code>之前将其反转</p>
<pre><code>response_rules = {
"approved": ["c_approved"],
"rejected": ["c_rejected", "a_rejected"],
"revised": ["a_approved"]
}
# invert dictionary
inverted_rules = {vv: k for k, v in response_rules.items() for vv in v}
# same as before
df["final_status"] = df.ffill(axis=1)["status_3"].map(inverted_rules)
print(df)
status_1 status_2 status_3 final_status
0 a_accepted_with_comment a_revised c_approved approved
1 a_accepted_with_comment c_rejected NaN rejected
2 a_rejected a_approved NaN revised
3 a_rejected NaN NaN rejected
# Just so you can see:
print(inverted_rules)
{'a_approved': 'revised',
'a_rejected': 'rejected',
'c_approved': 'approved',
'c_rejected': 'rejected'}
</code></pre>