gpt4 book ai didi

python - Pandas :每行前 N 个非缺失值的总和

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:43 26 4
gpt4 key购买 nike

我想高效地求和 pandas DataFrame 的前 N ​​个非缺失值。

例如,如果我有这样的数据框:

"df"

sid 1900 1899 332 855 1285 1413 1063 1768 2320 1117
bid
309 -0.02 -0.03 -0.03 -0.02 NaN -0.01 9.81e-04 -0.02 -0.02 1.25e-02
470 -0.02 -0.04 NaN -0.02 -0.04 -0.02 -2.48e-02 -0.02 -0.02 NaN
818 NaN NaN NaN NaN NaN NaN -3.87e-02 NaN NaN -2.54e-02
1080 NaN NaN NaN NaN NaN NaN -3.61e-02 0.08 NaN NaN
1292 0.06 0.08 -0.01 -0.01 -0.04 0.01 4.85e-02 NaN 0.00 2.72e-02
1449 -0.02 0.00 NaN NaN -0.04 NaN NaN -0.02 -0.00 -5.85e-04
2253 -0.03 -0.04 -0.04 -0.03 NaN -0.02 -4.12e-02 -0.02 -0.03 -2.51e-02
2441 NaN -0.04 -0.03 -0.02 NaN -0.02 -4.19e-02 -0.02 -0.03 -2.68e-02

我想对每行的前 3 个非缺失值求和,我可以按如下方式遍历数据框:

row_sum = np.zeros(len(df))
for i, index in enumerate(df.index):
row_sum[i]=df.ix[index].dropna()[:3].sum()

但是,这并不是特别有效。我喜欢一种矢量化的方法。我尝试了很多不同的方法来屏蔽 DataFrame 或底层数组 (df.values),但还没有找到任何有效的方法。

我担心我在这里遗漏了一些明显的东西。

注意:如果该行只有少于 N 项是可以的。我只想每行最多 N 个。

最佳答案

我认为你可以这样做:

at_most=2
df.apply(lambda x: (x[np.isfinite(x)][:at_most]).sum(), axis=1)

关于python - Pandas :每行前 N 个非缺失值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23447411/

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