gpt4 book ai didi

python - 你如何将第一个有效值向左移动?

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:13 24 4
gpt4 key购买 nike

我想将按日历年排序的数据框更改为过去的年份。

id 2015  2016   2017 2018   2019
0 NaN 7.0 8.0 7.0 3.0
1 NaN 8.0 5.0 7.0 NaN
2 4.0 NaN 5.0 NaN NaN
3 5.0 4.0 3.0 9.0 NaN
4 NaN NaN NaN NaN 1.0
5 4.0 3.0 NaN 4.0 5.0

我需要将所有有效值移到第一列。

预期的结果应该是这样的:

id   Y1   Y2      Y3     Y4  Y5
0 7.0 8.0 7.0 3.0 NaN
1 8.0 5.0 7.0 NaN NaN
2 4.0 NaN 5.0 NaN NaN
3 5.0 4.0 3.0 9.0 NaN
4 1.0 NaN NaN NaN NaN
5 4.0 3.0 NaN 4.0 5.0

注意:“id”是列,不是索引。

最佳答案

让我们尝试按行应用 np.roll:

df = df.set_index('id')
# using @user3483203's argmax trick to optimize
df.apply(lambda x: np.roll(x, -(~np.isnan(x)).argmax()), axis=1, raw=True)

2015 2016 2017 2018 2019
id
0 7.0 8.0 7.0 3.0 NaN
1 8.0 5.0 7.0 NaN NaN
2 4.0 NaN 5.0 NaN NaN
3 5.0 4.0 3.0 9.0 NaN
4 1.0 NaN NaN NaN NaN
5 4.0 3.0 NaN 4.0 5.0

不幸的是,np.roll 没有矢量化以对不同的行执行不同的移位,并且为了在值之间保留 NaN,必须这样做。

关于python - 你如何将第一个有效值向左移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56462733/

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