【发布时间】:2016-03-15 23:08:29
【问题描述】:
我想知道第一年各种项目的收入。
给定以下数据框:
ID Y1 Y2 Y3
0 NaN 8 4
1 NaN NaN 1
2 NaN NaN NaN
3 5 3 NaN
我想逐行返回具有非空值的第一列的名称。
在这种情况下,我想返回:
['Y2','Y3',NaN,'Y1']
我的目标是将此作为列添加到原始数据框中。
以下代码大部分都有效,但确实很笨重。
import pandas as pd
import numpy as np
df = pd.DataFrame({'Y1':[np.nan, np.nan, np.nan, 5],'Y2':[8, np.nan, np.nan, 3], 'Y3':[4, 1, np.nan, np.nan]})
df['first'] = np.nan
for ID in df.index:
row = df.loc[ID,]
for i in range(0,len(row)):
if (~pd.isnull(row[i])):
df.loc[ID,'first'] = row.index[i]
break
返回:
Y1 Y2 Y3 first
0 NaN 8 4 Y2
1 NaN NaN 1 Y3
2 NaN NaN NaN first
3 5 3 NaN Y1
有人知道更优雅的解决方案吗?
【问题讨论】: