我有一个类似于以下内容的DataFrame:
| A | B | C | D
---+---+---+---+---
1 | a | c | e | g
---+---+---+---+---
2 | a | c | e | h
---+---+---+---+---
3 | b | d | f | i
我希望得到一个数据透视表,其中列中的A和行中的B,然后C和D作为集合,如下所示:
| a | b
---+-----------+--------
c | (e, h, i) | ()
---+-----------+--------
d | () | (f, i)
答案 0 :(得分:2)
>>> f = lambda obj: set(obj[['C', 'D']].values.ravel())
>>> df.groupby(['B', 'A']).apply(f).unstack()
A a b
B
c set([g, e, h]) NaN
d NaN set([i, f])
或者,你可以有一个独特元素元组而不是set object:
>>> f = lambda obj: tuple(np.unique(obj[['C', 'D']].values))
>>> df.groupby(['B', 'A']).apply(f).unstack()
A a b
B
c (e, g, h) NaN
d NaN (f, i)