【发布时间】:2021-06-14 12:14:36
【问题描述】:
我有这张表,其中每一行都有不同的状态,放在多列中。这5个状态是其他列的组合,所以有可能是nan_nan。
no status1 status2 status3 status4 status5
1 ifa_accepted_w/comment ifc_approved nan_nan nan_nan nan_nan
2 ifa_accepted_w/comment ifc_accepted_w/comment nan_nan nan_nan nan_nan
3 ifa_rejected ifa_approved nan_nan nan_nan nan_nan
4 ifa_rejected ifa_approved nan_nan nan_nan nan_nan
5 ifc_approved nan_nan nan_nan nan_nan nan_nan
6 ifa_accepted_w/comment ifc_nan nan_nan nan_nan nan_nan
我需要创建新列,其中显示每行的 5 个状态列中的最后一个状态。 我尝试了下面的脚本,首先我定义了我拥有的所有规则,然后我通过从规则映射来创建一个新表。
response_rules = {
"approved": ["ifc_approved"],
"sub": ["ifc_accepted_w/comment", "ifc_rejected", "ifa_accepted_w/comment"],
"tp": ["ifc_nan", "ifa_approved"]
}
inverted_rules = {vv: k for k, v in response_rules.items() for vv in v}
df["status"] = df.ffill(axis=1)["status5].map(inverted_rules)
但是脚本不起作用。它在新列中为我提供 NaN 值,而不是我的 response_rules 中的字符串。
预期结果是:
no status1 status2 status3 status4 status5 status
1 ifa_accepted_w/comment ifc_approved nan_nan nan_nan nan_nan approved
2 ifa_accepted_w/comment ifc_accepted_w/comment nan_nan nan_nan nan_nan sub
3 ifa_rejected ifa_approved nan_nan nan_nan nan_nan tp
4 ifa_rejected ifa_approved nan_nan nan_nan nan_nan tp
5 ifc_approved nan_nan nan_nan nan_nan nan_nan approved
6 ifa_accepted_w/comment ifc_nan nan_nan nan_nan nan_nan tp
我的脚本有什么问题?还有其他方法可以让我得到我想要的桌子吗?
谢谢!
【问题讨论】: