我正在处理来自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
答案 0 :(得分:2)
使用DataFrame.ne
和axis=1
一起使用DataFrame.cumsum
和DataFrame.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