我的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列的值分组。
答案 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