Python Pandas:从数据帧中迭代提取Numpy数组
我有一个数据框,有6676行和40列。这是感兴趣的两列的截断版本Python Pandas:从数据帧中迭代提取Numpy数组,python,numpy,pandas,Python,Numpy,Pandas,我有一个数据框,有6676行和40列。这是感兴趣的两列的截断版本 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
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
我还有一个单独的用户id列表
0 1528106864
1 1520303069
2 1520305391
3 1521519315
4 1520303294
5 1520302954
6 1520302702
7 1528108709
8 1520278540
9 1520304915
如果列表中存在“user\u id”,我想迭代提取每个“user\u id”的“pos”值的单个numpy数组。这将返回10个单独的数组
数组的长度不同,因为数据帧中有可变的用户id
下面是两个从上面截短的数据中提取的数组的示例。。。这主要是一个基于上述数值的可视化辅助工具
1520304915:([0.3612,0.0000,…
1520278540:
([0.0000,-0.1027,
您可以使用方法使用列表用户id
对数据帧进行子集。然后通过用户id
列和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]
您可以与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'>
打印df
用户识别号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\u id.isin(l)]
打印g
用户识别号pos
0 1520304915 0.3612
1 1520304915 0.0000
2 1520278540 0.0000
5 1520303294 0.4404
6 1520278540 -0.1027
打印g.groupby('user_id')['pos'].apply(np.array)
用户id
1520278540 [0.0, -0.1027]
1520303294 [0.4404]
1520304915 [0.3612, 0.0]
名称:pos,数据类型:object
打印类型(g.groupby('user_id')['pos'].apply(np.array.iloc[0]))
由于您特别关注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