创建一个包含行中nan列的列表的列



给定以下数据帧:

ID | Y1   |   Y2   |   Y3|
---+------+--------+-----+
0  | NaN  |   8    |   4 |
1  | NaN  |   NaN  |   1 |
2  | NaN  |   NaN  |  NaN|
3  | 5    |   3    |  NaN|

我想创建一个额外的列,包含该行中所有带有nan的列,如下所示:

ID | Y1   |   Y2   |   Y3| Result          |
---+------+--------+-----+-----------------+
0  | NaN  |   8    |   4 |   ['Y1']        |
1  | NaN  |   NaN  |   1 | ['Y1','Y2']     |
2  | NaN  |   NaN  | NaN |['Y1','Y2','Y3'] |
3  | 5    |   3    |   7 |     []          |

我们可以先做dot再做split

s = df.filter(like='Y')
df['new'] = s.isna().dot(s.columns+',').str[:-1].str.split(',')
df
Out[81]: 
ID   Y1   Y2   Y3           new
0   0  NaN  8.0  4.0          [Y1]
1   1  NaN  NaN  1.0      [Y1, Y2]
2   2  NaN  NaN  NaN  [Y1, Y2, Y3]
3   3  5.0  3.0  NaN          [Y3]

最新更新