python pandas custom agg function

前端 未结 3 1025
情书的邮戳
情书的邮戳 2021-02-05 22:58
Dataframe:
  one two
a  1  x
b  1  y
c  2  y
d  2  z
e  3  z

grp = DataFrame.groupby(\'one\')
grp.agg(lambda x: ???) #or equivalent function

Desired o

3条回答
  •  我在风中等你
    2021-02-05 23:25

    You were so close:

    In [1]: df.groupby('one').agg(lambda x: "|".join(x.tolist()))
    Out[1]:
         two
    one
    1    x|y
    2    y|z
    3      z
    

    Expanded answer to handle sorting and take only the set:

    In [1]: df = DataFrame({'one':[1,1,2,2,3], 'two':list('xyyzz'), 'three':list('eecba')}, index=list('abcde'), columns=['one','two','three'])
    
    In [2]: df
    Out[2]:
       one two three
    a    1   x     e
    b    1   y     e
    c    2   y     c
    d    2   z     b
    e    3   z     a
    
    In [3]: df.groupby('one').agg(lambda x: "|".join(x.order().unique().tolist()))
    Out[3]:
         two three
    one
    1    x|y     e
    2    y|z   b|c
    3      z     a
    

提交回复
热议问题