我试图找到每行中有数据的最后一列,并将列名返回到数据框

时间:2019-02-19 00:38:53

标签: python-3.x pandas

我正在尝试获取ffill的值来自的列名。

我已经搜索了google和堆栈溢出,还没有找到实现此目的的方法。

这是填充代码:     df [“ LAST_PUNCH”] = df.ffill(axis = 1).iloc [:, -1]

这是我的数据框:

SHIFT     IN     OUT    IN_1    
DA6-0730  07:30  12:35  13:05      
DB0-ACOM  08:18  12:30             
DC4-0730  07:30  12:39  13:09     
DC4-0730  07:30  12:34  13:04     

这是使用填充后的数据框:

SHIFT     IN     OUT    IN_1   LAST_PUNCH
DA6-0730  07:30  12:35  13:05  13:05
DB0-ACOM  08:18  12:30         12:30
DC4-0730  07:30  12:39  13:09  13:09
DC4-0730  07:30  12:34  13:04  13:04

我想获取填充值来自的列名, 追加到填充值的末尾:

SHIFT     IN     OUT    IN_1   LAST_PUNCH
DA6-0730  07:30  12:35  13:05  13:05_IN_1
DB0-ACOM  08:18  12:30         12:30_OUT
DC4-0730  07:30  12:39  13:09  13:09_IN_1
DC4-0730  07:30  12:34  13:04  13:04_IN_1

1 个答案:

答案 0 :(得分:1)

嗯,这有点棘手

(df+'_'+pd.DataFrame(dict(zip(df.columns.values,df.columns.values)),index=df.index)).\
    reindex(columns=df.columns).ffill(axis=1).iloc[:,-1]
Out[360]: 
0    13:05_IN_1
1     12:30_OUT
2    13:09_IN_1
3    13:04_IN_1
Name: IN_1, dtype: object

或将idxmax与列的顺序相反

df.ffill(axis=1).iloc[:, -1]+'_'+df[df.columns[::-1]].notnull().idxmax(1)
Out[375]: 
0    13:05_IN_1
1     12:30_OUT
2    13:09_IN_1
3    13:04_IN_1
dtype: object