Python 如何在dataframe中创建密集列组时跳过列的空值?

Python 如何在dataframe中创建密集列组时跳过列的空值?,python,pandas,dataframe,dense-rank,Python,Pandas,Dataframe,Dense Rank,我必须根据列的值创建密集的列。该列有一些空值和一些浮点值。我必须跳过空值,专注于浮点值。我不知道该怎么做? 你能帮我做这件事吗 说明: df: 我使用下面的代码来创建密集的排名- df['dense_rank'] = df.groupby('comb_fld_order', sort=True).ngroup()+1 它给了我输出: comb_fld_order dense_rank 0 NULL 2 1 NULL 2 2

我必须根据列的值创建密集的列。该列有一些空值和一些浮点值。我必须跳过空值,专注于浮点值。我不知道该怎么做? 你能帮我做这件事吗

说明:

df:

我使用下面的代码来创建密集的排名-

df['dense_rank'] = df.groupby('comb_fld_order', sort=True).ngroup()+1
它给了我输出:

   comb_fld_order   dense_rank
0     NULL            2
1     NULL            2
2     NULL            2
3     1.1             1
4     1.1             1
5     NULL            2
但我想要以下输出:

   comb_fld_order   dense_rank
0     NULL            
1     NULL            
2     NULL            
3     1.1             1
4     1.1             1
5     NULL            
  • 在使用
    .groupby
  • 然后,如果需要空格而不是
    NaN,请使用
    fillna(“”)

  • 如果
    NULL
    是字符串,则可以执行以下操作:

    df['dense_rank'] = df[df['comb_fld_order'] != 'NULL'].groupby('comb_fld_order', sort=True).ngroup()+1
    
  • 在使用
    .groupby
  • 然后,如果需要空格而不是
    NaN,请使用
    fillna(“”)

  • 如果
    NULL
    是字符串,则可以执行以下操作:

    df['dense_rank'] = df[df['comb_fld_order'] != 'NULL'].groupby('comb_fld_order', sort=True).ngroup()+1
    

    你可以给dropna=True

    这就是我所做的

    >>> import pandas as pd
    >>> import numpy as np
    >>> df = pd.DataFrame({'comb_fld_order':[np.nan, np.nan, np.nan, 1.1, 1.1, np.nan]})
    >>> df
       comb_fld_order
    0             NaN
    1             NaN
    2             NaN
    3             1.1
    4             1.1
    5             NaN
    >>> df['dense_rank'] = df.groupby('comb_fld_order', sort=True,dropna=True).ngroup()+1
    >>> df
       comb_fld_order  dense_rank
    0             NaN           0
    1             NaN           0
    2             NaN           0
    3             1.1           1
    4             1.1           1
    5             NaN           0
    

    你可以给dropna=True

    这就是我所做的

    >>> import pandas as pd
    >>> import numpy as np
    >>> df = pd.DataFrame({'comb_fld_order':[np.nan, np.nan, np.nan, 1.1, 1.1, np.nan]})
    >>> df
       comb_fld_order
    0             NaN
    1             NaN
    2             NaN
    3             1.1
    4             1.1
    5             NaN
    >>> df['dense_rank'] = df.groupby('comb_fld_order', sort=True,dropna=True).ngroup()+1
    >>> df
       comb_fld_order  dense_rank
    0             NaN           0
    1             NaN           0
    2             NaN           0
    3             1.1           1
    4             1.1           1
    5             NaN           0
    

    在创建稠密_列之前,我已经使用了df=df.fillna(“”)。我尝试了你的建议,但没有得到理想的结果。@shivampatel Try:
    df['densite_rank']=df[df['comb_fld_order']!=“NULL'].groupby('comb_fld_order',sort=True).ngroup()+1
    @DavidErickson IMHO你可以简单地使用
    df['comb fld_order'].rank(method='densite').fillna(
    )+1Thanks@ShubhamSharma,我以前从未使用过
    .rank()
    。不过,有一个简单的pandas方法并不让我感到惊讶。在创建稠密_列之前,我已经使用了df=df.fillna(“”)。我尝试了你的建议,但没有得到理想的结果。@shivampatel Try:
    df['densite_rank']=df[df['comb_fld_order']!=“NULL'].groupby('comb_fld_order',sort=True).ngroup()+1
    @DavidErickson IMHO你可以简单地使用
    df['comb fld_order'].rank(method='densite').fillna(
    )+1Thanks@ShubhamSharma,我以前从未使用过
    .rank()
    。不过,有一个简单的方法可以解决这个问题,这并不奇怪。