gpt4 book ai didi

python - 计算 DataFrame 列中的 NaN 窗口(及其大小)

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:21 25 4
gpt4 key购买 nike

我有巨大的数据帧(数百万、数十)和沿列的大量缺失(NaN)值。我需要以尽可能最快的方式计算每列的 NaN 窗口及其大小(我的代码太慢)。

类似这样的:来自这里

import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[1,2, np.nan, np.nan,3,3,np.nan,4,np.nan,np.nan],\
'b':[np.nan, 2, 1, 1, 3, 3, np.nan, np.nan,2, np.nan],\
'c':[np.nan, 2, 1, np.nan, 3, 3, np.nan, np.nan,2, 8]})

df
Out[65]:
a b c
0 1.0 NaN NaN
1 2.0 2.0 2.0
2 NaN 1.0 1.0
3 NaN 1.0 NaN
4 3.0 3.0 3.0
5 3.0 3.0 3.0
6 NaN NaN NaN
7 4.0 NaN NaN
8 NaN 2.0 2.0
9 NaN NaN 8.0

到这里:

result
Out[61]:
a b c
0 2 1 1
1 1 2 1
2 2 1 2

最佳答案

这是一种方法:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[1,2, np.nan, np.nan,3,3,np.nan,4,np.nan,np.nan],\
'b':[np.nan, 2, 1, 1, 3, 3, np.nan, np.nan,2, np.nan],\
'c':[np.nan, 2, 1, np.nan, 3, 3, np.nan, np.nan,2, 8]})
df_n = pd.DataFrame({'a':df['a'].isnull().values,
'b':df['b'].isnull().values,
'c':df['c'].isnull().values})

pr={}
for column_name, _ in df_n.iteritems():

fst = df_n.index[df_n[column_name] & ~ df_n[column_name].shift(1).fillna(False)]
lst = df_n.index[df_n[column_name] & ~ df_n[column_name].shift(-1).fillna(False)]

pr[column_name] = [j-i+1 for i, j in zip(fst, lst)]

df_new=pd.DataFrame(pr)

输出:

    a   b   c
0 2 1 1
1 1 2 1
2 2 1 2

关于python - 计算 DataFrame 列中的 NaN 窗口(及其大小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57730136/

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