gpt4 book ai didi

python - 从左到右填充 pandas 列

转载 作者:行者123 更新时间:2023-12-01 06:29:11 27 4
gpt4 key购买 nike

我目前正在解决 pandas 问题,我想知道是否有一个简单的方法可以解决这个问题。

我确实有 pandas 表,其格式始终如下所示:

df = pd.DataFrame({'A':[1,2,np.nan,np.nan,3],'B':[2,3,np.nan,5,2],'C':[2,3,7,5,9],'D':[1,2,3,np.nan,np.nan]} )

该数据框应转换为:

df = pd.DataFrame({'A':[1,2,7,5,3],'B':[2,3,3,5,2],'C':[2,3,np.nan,np.nan,9],'D':[1,2,np.nan,np.nan,np.nan]} )

这意味着列中的所有值都需要尽可能向左移动。 (首先需要填充第一列,然后是第二列,依此类推。)有一个简单的解决方案可以做到这一点吗?

提前非常感谢。

最佳答案

使用自定义函数justify,仅将DataFrame转换为numpy数组:

#https://stackoverflow.com/a/44559180/2901002
df = pd.DataFrame(justify(df.to_numpy(),invalid_val=np.nan), columns=df.columns)
#pandas < 0.24
#df = pd.DataFrame(justify(df.values,invalid_val=np.nan), columns=df.columns)
print (df)
A B C D
0 1.0 2.0 2.0 1.0
1 2.0 3.0 3.0 2.0
2 7.0 3.0 NaN NaN
3 5.0 5.0 NaN NaN
4 3.0 2.0 9.0 NaN

如果性能不重要,请使用 DataFrame.applySeries.dropnaSeries 构造函数:

df = df.apply(lambda x: pd.Series(x.dropna().to_numpy()), axis=1)
#pandas < 0.24
#df = df.apply(lambda x: pd.Series(x.dropna().values), axis=1)

关于python - 从左到右填充 pandas 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59985072/

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