在Python中创建一个指示符变量,使用一个将NaN保留为NaN的阈值

在Python中创建一个指示符变量,使用一个将NaN保留为NaN的阈值,python,pandas,nan,Python,Pandas,Nan,我有一些来自电导探针的浮子数据,其中包含一些NaN。我希望将探测数据转换为基于经验阈值的指标变量,但我希望NaN值保持NaN。转换为指示器似乎很简单,但问题在于如何处理nan。以下是阈值为50的示例: import numpy as np import pandas as pd x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91] df = pd.DataFrame({"x":x}) df['indicator'] = (df.x <=50)*1 但

我有一些来自电导探针的浮子数据,其中包含一些NaN。我希望将探测数据转换为基于经验阈值的指标变量,但我希望NaN值保持NaN。转换为指示器似乎很简单,但问题在于如何处理nan。以下是阈值为50的示例:

import numpy as np
import pandas as pd

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
df['indicator'] = (df.x <=50)*1
但我希望nan的指标是nan,如下所示:

      x  indicator
0   0.0          1
1   NaN        NaN  
2   2.0          1
3   3.0          1
4   4.0          1
5  51.0          0
6  61.0          0
7  71.0          0
8  81.0          0
9  91.0          0
感谢您的帮助。谢谢。

您可以试试这个:

In [1829]: df['indicator'] = df[df.x <=50]*1                                                                                                                                                                
import numpy as np
import pandas as pd

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
df['indicator'] = df.x*(df.x <=50)
对于精确输出:

mport numpy as np
import pandas as pd

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
df['indicator'] = np.where(df.x.isnull(), np.nan, df.x < 50)
你可以试试这个:

import numpy as np
import pandas as pd

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
df['indicator'] = df.x*(df.x <=50)
对于精确输出:

mport numpy as np
import pandas as pd

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
df['indicator'] = np.where(df.x.isnull(), np.nan, df.x < 50)

我想尝试将lambda应用于列:

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
indicator = lambda x: np.nan if (np.isnan(x)) else (x<=50)*1 
df['indicator'] = df['x'].apply(indicator)
print(df)

我想尝试将lambda应用于列:

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
indicator = lambda x: np.nan if (np.isnan(x)) else (x<=50)*1 
df['indicator'] = df['x'].apply(indicator)
print(df)

给你带来麻烦的代码在哪里?很多教程都介绍了数据帧过滤。给您带来麻烦的代码在哪里?许多教程都介绍了数据帧过滤。
x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
indicator = lambda x: np.nan if (np.isnan(x)) else (x<=50)*1 
df['indicator'] = df['x'].apply(indicator)
print(df)
      x  indicator
0   0.0        1.0
1   NaN        NaN
2   2.0        1.0
3   3.0        1.0
4   4.0        1.0
5  51.0        0.0
6  61.0        0.0
7  71.0        0.0
8  81.0        0.0
9  91.0        0.0