如何在 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
- 在使用
.groupby
之前用 .notnull()
过滤掉 NaN
值
- 然后,如果您想要空格而不是
NaN
,请使用 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
我必须根据列的值创建密集排名。该列有一些空值和一些浮点值。我必须跳过空值并专注于浮点值。我不确定该怎么做? 你能帮我做这个吗?
解释:
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
- 在使用
.groupby
之前用 - 然后,如果您想要空格而不是
NaN
,请使用
.notnull()
过滤掉 NaN
值
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