【问题标题】:Priority on group by in pandas data frame熊猫数据框中分组的优先级
【发布时间】:2019-05-10 16:50:50
【问题描述】:

我需要从 Col_2 中选择字母到 new_col。当有 2 个值时,我想根据 Col_2 中的值给予优先级:A、B。如果 col_1 确定有 2 个值,我需要为 A 赋予比 B 更高的选择优先级。


Col_1      Col_2        new_col
1            A             A
1            B             A
2            B             B 
3            A             A 
4            B             A
4            A             A

【问题讨论】:

    标签: pandas


    【解决方案1】:

    通过在列参数categories 中排序来使用具有设置优先级的有序分类,然后使用GroupBy.transform 返回具有与max 值填充的原始大小相同的系列:

    df['Col_2'] = pd.Categorical(df['Col_2'], ordered=True, categories=['B','A'])
    
    #another solution for lower pandas versions
    #df['Col_2'] = pd.CategoricalIndex(df['Col_2'], ordered=True, categories=['B','A'])
    
    df['new_col1'] = df.groupby('Col_1')['Col_2'].transform('max')
    print (df)
       Col_1 Col_2 new_col new_col1
    0      1     A       A        A
    1      1     B       A        A
    2      2     B       B        B
    3      3     A       A        A
    4      4     B       A        A
    5      4     A       A        A
    

    另一种解决方案,双 Series.map 按优先级字典:

    d = {'A':2, 'B':1}
    #swap keys with values
    d1 = {v:k for k, v in d.items()}
    df['new_col1'] = df['Col_2'].map(d).groupby(df['Col_1']).transform('max').map(d1)
    print (df)
       Col_1 Col_2 new_col new_col1
    0      1     A       A        A
    1      1     B       A        A
    2      2     B       B        B
    3      3     A       A        A
    4      4     B       A        A
    5      4     A       A        A
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多