Dan*_*ty2 5 python replace dataframe pandas
给出以下数据框:
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
Run Code Online (Sandbox Code Playgroud)
我想用列名替换所有非空值.
期望的结果:
a b
0 a NaN
1 a b
2 a b
Run Code Online (Sandbox Code Playgroud)
实际上,我有很多专栏.
提前致谢!
更新以从根回答: 要对列的子集执行此操作:
d.loc[:,d.columns[3:]] = np.where(d.loc[:,d.columns[3:]].notnull(), d.loc[:,d.columns[3:]].columns, d.loc[:,d.columns[3:]])
Run Code Online (Sandbox Code Playgroud)
d[:] = np.where(d.notnull(), d.columns, d)
Run Code Online (Sandbox Code Playgroud)
结果输出:
a b
0 a NaN
1 a b
2 a b
Run Code Online (Sandbox Code Playgroud)
编辑
要选择特定列:
cols = d.columns[3:] # or whatever Index/list-like of column names
d[cols] = np.where(d[cols].notnull(), cols, d[cols])
Run Code Online (Sandbox Code Playgroud)
我可以想到一种可能性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
Run Code Online (Sandbox Code Playgroud)
你也可以使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |