如何根据其他列的相同id从pandas数据帧中获取唯一值

时间:2017-02-03 13:15:27

标签: python-3.x pandas

我的pandas数据框如下:

user id
1     2
1     2
1     2
1     3
1     3

我希望按以下值分组: (1,1,1,2-),(1,1,3)

我正在使用它,它只提供一列的唯一值

pd.unique(df[['id']].values.ravel())

但是我希望使用pandas将具有唯一id列的值分组。

1 个答案:

答案 0 :(得分:1)

一种方式,似乎不言自明:

df = df.sort_values(['user', 'id'])

df['groups'] = (df.id!=df.id.shift()).cumsum()  # pattern to number groups

df
Out[26]: 
   user  id  groups
0     1   2       1
1     1   2       1
2     1   2       1
3     1   3       2
4     1   3       2

df.id = df.id.drop_duplicates('last').reindex_like(df)

df
Out[28]: 
   user   id  groups
0     1  NaN       1
1     1  NaN       1
2     1  2.0       1
3     1  NaN       2
4     1  3.0       2


df.set_index('groups').stack()
Out[30]: 
groups      
1       user    1.0
        user    1.0
        user    1.0
        id      2.0
2       user    1.0
        user    1.0
        id      3.0
dtype: float64

df.groupby(level=0).apply(tuple)
Out[36]: 
groups
1    (1.0, 1.0, 1.0, 2.0)
2         (1.0, 1.0, 3.0)
dtype: object