gpt4 book ai didi

python - 在 Pandas DataFrame 的每一行中找到第一个非零值

转载 作者:太空狗 更新时间:2023-10-29 18:19:48 26 4
gpt4 key购买 nike

我有一个 Pandas 数据框:

import pandas as pd

df = pd.DataFrame([[0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0],
[1.0, 0.0, 1.0, 3.0, 1.0, 1.0, 7.0, 0.0],
[0.0, 0.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0]
]
, columns=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'])

A B C D E F G H
0 0.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0
1 1.0 0.0 1.0 3.0 1.0 1.0 7.0 0.0
2 0.0 0.0 13.0 14.0 15.0 16.0 17.0 18.0

我想返回每行中第一个非零值的系列(不是列表)。这目前有效,但 lookup 返回列表而不是系列(我知道我可以将列表转换为系列)但我假设有更好的方法:

first_nonzero_colnames = (df > 0).idxmax(axis=1, skipna=True)
df.lookup(first_nonzero_colnames.index, first_nonzero_colnames.values)

[ 2. 1. 13.]

我可以使用 .apply 但我想避免它。

最佳答案

试试这个:

res = df[df != 0.0].bfill(axis=1)['A']

我所做的就是用 nan 替换所有非零值,然后从右边填充它们,这会强制第一列中的所有结果值成为第一个非零值在行中。

或者,按照@piRSquared 的建议,一种更快的方法:

df.replace(0, np.nan).bfill(1).iloc[:, 0]

关于python - 在 Pandas DataFrame 的每一行中找到第一个非零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38467749/

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