gpt4 book ai didi

python - Pandas 数据框获取最后一个非零列的值

转载 作者:太空狗 更新时间:2023-10-29 18:15:54 25 4
gpt4 key购买 nike

我有一个包含 3 列的 pandas 数据框,每列包含一个用户在 session 期间访问过的站点。

在某些情况下,用户可能没有在单个 session 中访问过 3 个站点。这由 0 表示,表示未访问任何站点。

import pandas as pd

df = pd.DataFrame(data=[[5, 8, 1],[8,0,0],[1,17,0]],
columns=['site1', 'site2', 'site3'])
print(df)

site1 site2 site3
0 5 8 1
1 8 0 0
2 1 17 0

在上面的示例中,用户 0 访问了站点 5、8 和 1。用户 1 仅访问了站点 8,用户 2 访问了站点 1 和 17。

我想创建一个新列 last_site,它显示用户在该 session 中最后访问的网站。

我想要的结果是这样的:

   site1  site2  site3  last_site
0 5 8 1 1
1 8 0 0 8
2 1 17 0 17

我怎样才能使用 pandas 以简洁的方式做到这一点?

最佳答案

使用前向填充通过替换 0 值创建的错误值,然后通过 iloc 选择最后一列:

df['last'] = df.replace(0, np.nan).ffill(axis=1).iloc[:, -1].astype(int)
print (df)
site1 site2 site3 last
0 5 8 1 1
1 8 0 0 8
2 1 17 0 17

如果性能很重要,可以使用 numpy:

a = df.values
m = a != 0

df['last'] = a[np.arange(m.shape[0]), m.shape[1]-m[:,::-1].argmax(1)-1]
print (df)
site1 site2 site3 last
0 5 8 1 1
1 8 0 0 8
2 1 17 0 17

关于python - Pandas 数据框获取最后一个非零列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53133183/

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