如何在 pandas 数据框中创建密集排名时跳过列的空值?

How to skip the null value of a column while creating the dense rank in pandas dataframe?

我必须根据列的值创建密集排名。该列有一些空值和一些浮点值。我必须跳过空值并专注于浮点值。我不确定该怎么做? 你能帮我做这个吗?

解释:

df:

  comb_fld_order
0     NULL
1     NULL
2     NULL
3     1.1
4     1.1
5     NULL

我正在使用以下代码来创建密集排名-

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            
  1. 在使用 .groupby
  2. 之前用 .notnull() 过滤掉 NaN
  3. 然后,如果您想要空格而不是 NaN
  4. ,请使用 fillna('')

import pandas as pd
df['dense_rank'] = df[df['comb_fld_order'].notnull()].groupby('comb_fld_order', sort=True).ngroup()+1
df['dense_rank'] = df['dense_rank'].fillna('')
df
Out[1]: 
   comb_fld_order dense_rank
0             NaN           
1             NaN           
2             NaN           
3             1.1          1
4             1.1          1
5             NaN           

如果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