我有一个包含6676行和40列的DataFrame。这是两列感兴趣的截断版本。
user_id pos
0 1520304915 0.3612
1 1520304915 0.0000
2 1520278540 0.0000
3 1520302105 0.4404
4 1520278547 -0.1531
5 1520303294 0.4404
6 1520278540 -0.1027
7 1522888020 0.9512
8 1520302847 0.7192
9 1523490451 0.8689
我还有一个单独的user_id列表。
0 1528106864
1 1520303069
2 1520305391
3 1521519315
4 1520303294
5 1520302954
6 1520302702
7 1528108709
8 1520278540
9 1520304915
如果列表中存在'user_id',我想迭代地为每个'user_id'的'pos'值提取单个numpy数组。这应该返回10个单独的数组。
由于DataFrame中存在变量user_id,因此数组的长度会有所不同。
以下是从上面的截断数据中得出的数组的两个示例...这主要是基于上面我可以看到的值的可视化辅助工具。
1520304915:([0.3612, 0.0000, ...
1520278540:([0.0000, -0.1027, ...
答案 0 :(得分:1)
您可以使用isin
方法将数据框与您的list_user_id
进行对。然后user_id
列grouby
和agg
In [199]: df['user_id'].isin(list_user_id)
Out[199]:
0 True
1 True
2 True
3 False
4 False
5 True
6 True
7 False
8 False
9 False
Name: user_id, dtype: bool
In [200]: df[df['user_id'].isin(list_user_id)].groupby('user_id').agg(lambda x: x.tolist())
Out[200]:
pos
user_id
1520278540 [0.0, -0.1027]
1520303294 [0.4404]
1520304915 [0.3612, 0.0]
将变量转换为列表:
Error report:
答案 1 :(得分:1)
您可以将isin
和groupby
与apply
np.array
一起使用:
print df
user_id pos
0 1520304915 0.3612
1 1520304915 0.0000
2 1520278540 0.0000
3 1520302105 0.4404
4 1520278547 -0.1531
5 1520303294 0.4404
6 1520278540 -0.1027
7 1522888020 0.9512
8 1520302847 0.7192
9 1523490451 0.8689
l = [1528106864, 1520303069, 1520305391, 1521519315, 1520303294,
1520302954, 1520302702, 1528108709, 1520278540, 1520304915]
g = df[df.user_id.isin(l)]
print g
user_id pos
0 1520304915 0.3612
1 1520304915 0.0000
2 1520278540 0.0000
5 1520303294 0.4404
6 1520278540 -0.1027
print g.groupby('user_id')['pos'].apply(np.array)
user_id
1520278540 [0.0, -0.1027]
1520303294 [0.4404]
1520304915 [0.3612, 0.0]
Name: pos, dtype: object
print type(g.groupby('user_id')['pos'].apply(np.array).iloc[0])
<type 'numpy.ndarray'>
答案 2 :(得分:1)
正如你专门在np数组之后,以下是你想要的:
In [34]:
df[df['user_id'].isin(df1['ids'])].groupby('user_id')['pos'].apply(lambda x: x.values)
Out[34]:
user_id
1520278540 [0.0, -0.1027]
1520303294 [0.4404]
1520304915 [0.3612, 0.0]
Name: pos, dtype: object
这是第一个条目:
In [36]:
df[df['user_id'].isin(df1['ids'])].groupby('user_id')['pos'].apply(lambda x: x.values).iloc[0]
Out[36]:
array([ 0. , -0.1027])
你可以看到这是一个np数组:
In [37]:
type(df[df['user_id'].isin(df1['ids'])].groupby('user_id')['pos'].apply(lambda x: x.values).iloc[0])
Out[37]:
numpy.ndarray