python agg函数_python pandas自定义agg函数

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 output from grp.agg:

one two

1 x|y

2 y|z

3 z

My agg function before integrating dataframes was "|".join(sorted(set(x))). Ideally I want to have any number of columns in the group and agg returns the "|".join(sorted(set()) for each column item like two above. I also tried np.char.join().

Love Pandas and it has taken me from a 800 line complicated program to a 400 line walk in the park that zooms. Thank you :)

解决方案

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值