移动每行的最后一个非空值-熊猫

时间:2020-06-25 10:10:01

标签: python pandas dataframe

我正在处理来自noSQL表的数据帧,这意味着行的长度不同。 我需要检索每行的最后一个非空值,将其移至新列“ h”,并将其从其初始位置删除。

我最初的DataFrame是:

      a           b     c     d   e     f     g
0  1635  01/01/2018  Null  Null  95   120    80
1  7364  01/15/2018   178   182  99  Null  Null
2  8947  01/20/2018  Null   190  92  Null  Null
3  6473  01/24/2018    45   122  99    32  Null

我想得到这个结果:

      a           b     c     d     e     f     g   h
0  1635  01/01/2018  Null  Null    95   120  Null  80
1  7364  01/15/2018   178   182  Null  Null  Null  99
2  8947  01/20/2018  Null   190  Null  Null  Null  92
3  6473  01/24/2018    45   122    99  Null  Null  32

2 个答案:

答案 0 :(得分:2)

使用DataFrame.neaxis=1一起使用DataFrame.cumsumDataFrame.idxmax来获取包含最后一个非空值的列,最后使用DataFrame.lookup来获取值,对应于cols

cols = df.ne('Null').cumsum(axis=1).idxmax(axis=1)
df['h'] = df.lookup(df.index, cols)

结果:

# print(df)
      a           b     c     d   e     f     g   h
0  1635  01/01/2018  Null  Null  95   120    80  80
1  7364  01/15/2018   178   182  99  Null  Null  99
2  8947  01/20/2018  Null   190  92  Null  Null  92
3  6473  01/24/2018    45   122  99    32  Null  32

答案 1 :(得分:1)

作为其他解决方案,您可以使用last_valid_index。但是,您首先必须将所有RewriteRule user/(0-9a-zA-Z_-) index.php?u=$ 值都转换为Null

np.NaN

输出:

df[df=="Null"] = np.NaN

df["h"] = df.apply(lambda x: x[x.last_valid_index()], axis=1)
df