gpt4 book ai didi

python - 如果遇到 NaN 值,将值移到 Python DataFrame 的顶部

转载 作者:行者123 更新时间:2023-11-28 17:32:00 27 4
gpt4 key购买 nike

我正在使用不规则的 df。我试图摆脱最初的 NaN 并将所有值移到顶部,将 NaN 留在底部。我想重新调整顶部的值,忽略日期。

============================================= ===================

STRIP      col1  col2   col3  col4  col5  col6  col7 col8
01/12/2011 0.8 NaN NaN NaN NaN NaN NaN NaN
01/01/2012 0.8 0.8 NaN NaN NaN NaN NaN NaN
01/02/2012 0.8 0.8 0.78 NaN NaN NaN NaN NaN
01/03/2012 0.8 0.8 0.75 0.7 0.6 NaN NaN NaN
01/04/2012 0.7 0.7 0.73 0.7 0.6 0.6 NaN NaN
01/05/2012 0.7 0.7 0.72 0.7 0.6 0.6 0.1 NaN
01/06/2012 0.7 0.7 0.70 0.7 0.6 0.6 0.2 0.7
01/07/2012 0.7 0.7 0.69 0.7 0.6 0.6 0.3 0.9
01/08/2012 0.7 0.7 0.68 0.7 0.6 0.6 0.4 0.6
01/09/2012 0.7 0.7 0.67 0.7 0.6 0.6 0.5 0.4
02/01/2013 NaN NaN NaN NaN 0.5 0.6 0.8 0.3
03/01/2013 NaN NaN NaN NaN 0.5 0.6 0.7 0.2

============================================= ====================
最终的 DataFrame 应如下所示:

STRIP      col1  col2  col3  col4  col5  col6  col7  col8
01/12/2011 0.8 0.8 0.78 0.7 0.6 0.6 0.1 0.7
01/01/2012 0.8 0.8 0.75 0.7 0.6 0.6 0.2 0.9
01/02/2012 0.8 0.8 0.73 0.7 0.6 0.6 0.3 0.6
01/03/2012 0.8 0.7 0.72 0.7 0.6 0.6 0.4 0.4
01/04/2012 0.7 0.7 0.7 0.7 0.6 0.6 0.5 0.3
01/05/2012 0.7 0.7 0.69 0.7 0.6 0.6 0.6 0.2
01/06/2012 0.7 0.7 0.68 0.7 0.6 0.6 0.7 NaN
01/07/2012 0.7 0.7 0.67 NaN 0.5 0.6 NaN NaN
01/08/2012 0.7 0.7 NaN NaN 0.5 NaN NaN NaN
01/09/2012 0.7 NaN NaN NaN NaN NaN NaN NaN
02/01/2013 NaN NaN NaN NaN NaN NaN NaN NaN
03/01/2013 NaN NaN NaN NaN NaN NaN NaN NaN

最佳答案

您遍历列并使用 first_valid_indexget_loc shift列值:

In [314]:
for col in df:
df[col] = df[col].shift(-df.index.get_loc(df[col].first_valid_index()))
df

Out[314]:
col1 col2 col3 col4 col5 col6 col7 col8
STRIP
01/12/2011 0.8 0.8 0.78 0.7 0.6 0.6 0.1 0.7
01/01/2012 0.8 0.8 0.75 0.7 0.6 0.6 0.2 0.9
01/02/2012 0.8 0.8 0.73 0.7 0.6 0.6 0.3 0.6
01/03/2012 0.8 0.7 0.72 0.7 0.6 0.6 0.4 0.4
01/04/2012 0.7 0.7 0.70 0.7 0.6 0.6 0.5 0.3
01/05/2012 0.7 0.7 0.69 0.7 0.6 0.6 0.8 0.2
01/06/2012 0.7 0.7 0.68 0.7 0.6 0.6 0.7 NaN
01/07/2012 0.7 0.7 0.67 NaN 0.5 0.6 NaN NaN
01/08/2012 0.7 0.7 NaN NaN 0.5 NaN NaN NaN
01/09/2012 0.7 NaN NaN NaN NaN NaN NaN NaN
02/01/2013 NaN NaN NaN NaN NaN NaN NaN NaN
03/01/2013 NaN NaN NaN NaN NaN NaN NaN NaN

另一种使用apply的方法:

In [317]:
df.apply(lambda x: x.shift(-x.index.get_loc(x.first_valid_index())))

Out[317]:
col1 col2 col3 col4 col5 col6 col7 col8
STRIP
01/12/2011 0.8 0.8 0.78 0.7 0.6 0.6 0.1 0.7
01/01/2012 0.8 0.8 0.75 0.7 0.6 0.6 0.2 0.9
01/02/2012 0.8 0.8 0.73 0.7 0.6 0.6 0.3 0.6
01/03/2012 0.8 0.7 0.72 0.7 0.6 0.6 0.4 0.4
01/04/2012 0.7 0.7 0.70 0.7 0.6 0.6 0.5 0.3
01/05/2012 0.7 0.7 0.69 0.7 0.6 0.6 0.8 0.2
01/06/2012 0.7 0.7 0.68 0.7 0.6 0.6 0.7 NaN
01/07/2012 0.7 0.7 0.67 NaN 0.5 0.6 NaN NaN
01/08/2012 0.7 0.7 NaN NaN 0.5 NaN NaN NaN
01/09/2012 0.7 NaN NaN NaN NaN NaN NaN NaN
02/01/2013 NaN NaN NaN NaN NaN NaN NaN NaN
03/01/2013 NaN NaN NaN NaN NaN NaN NaN NaN

编辑

如果“STRIP”是一列,那么您不需要 get_loc:

In [319]:
df.apply(lambda x: x.shift(-x.first_valid_index()))

Out[319]:
STRIP col1 col2 col3 col4 col5 col6 col7 col8
0 01/12/2011 0.8 0.8 0.78 0.7 0.6 0.6 0.1 0.7
1 01/01/2012 0.8 0.8 0.75 0.7 0.6 0.6 0.2 0.9
2 01/02/2012 0.8 0.8 0.73 0.7 0.6 0.6 0.3 0.6
3 01/03/2012 0.8 0.7 0.72 0.7 0.6 0.6 0.4 0.4
4 01/04/2012 0.7 0.7 0.70 0.7 0.6 0.6 0.5 0.3
5 01/05/2012 0.7 0.7 0.69 0.7 0.6 0.6 0.8 0.2
6 01/06/2012 0.7 0.7 0.68 0.7 0.6 0.6 0.7 NaN
7 01/07/2012 0.7 0.7 0.67 NaN 0.5 0.6 NaN NaN
8 01/08/2012 0.7 0.7 NaN NaN 0.5 NaN NaN NaN
9 01/09/2012 0.7 NaN NaN NaN NaN NaN NaN NaN
10 02/01/2013 NaN NaN NaN NaN NaN NaN NaN NaN
11 03/01/2013 NaN NaN NaN NaN NaN NaN NaN NaN

关于python - 如果遇到 NaN 值,将值移到 Python DataFrame 的顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676133/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com