python pandas自定义agg功能

bri*_*ler 10 python numpy pandas

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
Run Code Online (Sandbox Code Playgroud)

来自grp.agg的所需输出:

one two
1   x|y
2   y|z
3   z
Run Code Online (Sandbox Code Playgroud)

在集成数据帧之前我的agg函数是"|".join(sorted(set(x))).理想情况下,我希望组中有任意数量的列,并且agg返回"|".join(sorted(set())每个列项,如上面的两个.我也试过了np.char.join().

爱熊猫,它带我从一个800线复杂的程序到一个400线的步行放大公园.谢谢 :)

Zel*_*ny7 12

你太近了:

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

处理排序的扩展答案仅采用集合:

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
Run Code Online (Sandbox Code Playgroud)