pandas groupby の複数の列から一意の値を取得する方法 質問する

pandas groupby の複数の列から一意の値を取得する方法 質問する

このデータフレーム df から開始します。

df = pd.DataFrame({'c':[1,1,1,2,2,2],'l1':['a','a','b','c','c','b'],'l2':['b','d','d','f','e','f']})

   c l1 l2
0  1  a  b
1  1  a  d
2  1  b  d
3  2  c  f
4  2  c  e
5  2  b  f

列に対して groupby を実行して、列と列cの一意の値を取得したいと思います。1 つの列に対して、次の操作を実行できます。l1l2

g = df.groupby('c')['l1'].unique()

正しく返されるもの:

c
1    [a, b]
2    [c, b]
Name: l1, dtype: object

ただし、以下を使用します:

g = df.groupby('c')['l1','l2'].unique()

戻り値:

AttributeError: 'DataFrameGroupBy' object has no attribute 'unique'

2 つの列の一意の値は、次のようにして取得できることがわかっています (他にもいくつかあります):

In [12]: np.unique(df[['l1','l2']])
Out[12]: array(['a', 'b', 'c', 'd', 'e', 'f'], dtype=object)

次のような結果を得るために、このメソッドを groupby に適用する方法はありますか?

c
1    [a, b, d]
2    [c, b, e, f]
Name: l1, dtype: object

ベストアンサー1

あるいは、以下を使用することもできますagg:

g = df.groupby('c')['l1','l2'].agg(['unique'])

おすすめ記事