Python Pandas对数据框列进行排名

时间:2019-01-25 03:48:23

标签: python-3.x pandas python-2.7 dataframe pandas-groupby

我正在尝试在数据框中的两列上使用等级函数。

问题

其中一列包含空白值,这不允许我在排名前进行groupby。

错误:ValueError:长度不匹配:预期轴有1122个元素,新值有1814个元素

 df_source['col1'] = df_source['col1'].apply(lambda \
    x:x.strip()).replace('',np.nan)

 df_source['Rank'] = df_source.groupby(by=['col0','col1']) \
    ['col1'].transform(lambda x: x.rank(na_option='bottom'))


      **Actual:**

        col0   col1
        98630  a
               a
        90211  a
        31111  a
               b
        23323  c

    **Expected**

        col0   col1  Rank
        98630  a      1
               a      2
        90211  a      1
        31111  a      1
               b      1
        23323  c      1

1 个答案:

答案 0 :(得分:1)

此代码给出了预期的结果。我试图避免对具有空值的列使用groupby函数。

    df['col0'] = df['col0'].replace('', np.nan)
    df_int = df.loc[df['col0'].notnull(), 'col1'].unique()
    df = df[~(df['col0'].isin(df_int) & df['col1'].isnull())]