首页 > 解决方案 > 返回新列中每一行中第一个匹配值的列名

问题描述

我有一个数据框,其中第一列是 ID,其他列是日期。每个 ID 可能在几列中显示相同的内容,可能有一些前导 NaN 列,或者可能有所有 NaN 列。我想使用首次出现特定条目的列的名称创建一个新列。

样本df:

| id_report | req id | 1-Jan | 2-Jan | 3-Jan | 4-Jan |
| --------- | -------------- | ----- | ----- | ----- | ----- |
| 0   | 12345 | NaN | Pend | Pend | Appr |
| 1   | 12346  | NaN | NaN | NaN | NaN |
| 2   | 12347 | NaN | NaN | Pend | Pend |
| 3   | 12348  | NaN | NaN | NaN | Appr |

我已经搜索并想出了:

id_report["Pend"] = id_report.apply(lambda x: x == "Pend", axis = 1).idxmax(axis = 1)

但这会为没有出现“Pend”的每一行返回“req id”,我想将这些位置保留为空。

期望的输出:

id_report 请求编号 1-1月 1月2日 1月3日 1 月 4 日 挂起
0 12345 挂起 挂起 应用程序 1月2日
1 12346
2 12347 挂起 挂起 1月3日
3 12348 应用程序

标签: pythonpandasdataframe

解决方案


推荐阅读