用列名替换非空值[英] Replacing non-null values with column names

本文是小编为大家收集整理的关于用列名替换非空值的处理方法,想解了用列名替换非空值的问题怎么解决?用列名替换非空值问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

给定以下数据框架:

import pandas as pd
d = pd.DataFrame({'a':[1,2,3],'b':[np.nan,5,6]})
d
    a   b
0   1   NaN
1   2   5.0
2   3   6.0

我想用列名替换所有非空值.

所需结果:

    a   b
0   a   NaN
1   a   b
2   a   b

实际上,我有很多列.

预先感谢!

更新以从根本上回答: 要在列的子集上执行此操作:

d.loc[:,d.columns[3:]] = np.where(d.loc[:,d.columns[3:]].notnull(), d.loc[:,d.columns[3:]].columns, d.loc[:,d.columns[3:]])

推荐答案

我可以想到使用apply/transform的一种可能性:

In [1610]: d.transform(lambda x: np.where(x.isnull(), x, x.name))
Out[1610]: 
   a    b
0  a  nan
1  a    b
2  a    b

您也可以使用df.where:

In [1627]: d.where(d.isnull(), d.columns.values.repeat(len(d)).reshape(d.shape))
Out[1627]: 
   a    b
0  a  NaN
1  a    b
2  b    b

其他推荐答案

使用 numpy.where numpy.where >

d[:] = np.where(d.notnull(), d.columns, d)

结果输出:

   a    b
0  a  NaN
1  a    b
2  a    b

编辑

选择特定列:

cols = d.columns[3:]  # or whatever Index/list-like of column names
d[cols] = np.where(d[cols].notnull(), cols, d[cols])

本文地址:https://www.itbaoku.cn/post/1728062.html