私は'B'
効率的な方法
df.groupby('A').B.union()
もdf.groupby('A').B.apply(set.union)
どちらも仕事で'A'
と組合すべてのリストでグループ化するこのdf
df = pd.DataFrame(dict(
A=['b', 'a', 'b', 'c', 'a', 'c', 'a', 'c', 'a', 'a'],
B=[[0, 2, 3, 1],
[9, 6, 7, 2],
[6, 0, 1, 4],
[9, 2, 5, 1],
[5, 1, 4, 8],
[8, 5, 6, 6],
[0, 9, 0, 0],
[2, 6, 1, 8],
[7, 3, 2, 6],
[8, 7, 1, 9]]
))
を持っています。
私は、問題は、あなたが労働組合を適用する前に最初のセットとしてそれらをキャストする必要があるということです
def f(x):
# grabbing first one so I can
# make a set out of it
first, *rest = x.values.tolist()
# union won't work unless it's on
# a set, it doesn't care about the rest
return set(first).union(*rest)
df.groupby('A').B.apply(f)
A
a {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
b {0, 1, 2, 3, 4, 6}
c {1, 2, 5, 6, 8, 9}
Name: B, dtype: object
第二 'map'が必要ですか?それなしで私のためにうまく動作します。 – root
ええ、セット工事は十分でなければなりません、あなたはちょうど一組の組を最後に取っています。 –
非常にエレガントなソリューション! – MaxU