用DataFrame得到标识符矩阵

2024-10-05 12:22:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的新手。我有一些数据

dat1=DataFrame({'user_id':['a1','a1','a4','a3','a1','a15', 'a8', 'a15'      ,'a1', 'a5'],
 'Visits':[1,4,2,1,3,1,1,8,1,9],'cell': [14,21,14,14,19,10,18,17,10,11], 
 'date': ['2011-01-05', '2011-01-05', '2011-01-12', '2011-01-12', '2011-01-12',   '2011-01-12', '2011-01-02', '2011-01-19', '2011-01-19', '2011-01-19' ] })




 dat1['date']=pd.to_datetime(dat1['date'])

 dat2=dat1.sort_index(by='date')    

这给了我一个窗体的数据帧

Visits  cell     date     user_id
   1    18   2011-01-02      a8
   1    14   2011-01-05      a1
   4    21   2011-01-05      a1
   2    14   2011-01-12      a4
   1    14   2011-01-12      a3
   3    19   2011-01-12      a1
   1    10   2011-01-12     a15
   8    17   2011-01-19     a15
   1    10   2011-01-19      a1
   9    11   2011-01-19      a5

我想创建一个DataFrame,这样每一列都用一个唯一的用户id标识,每一行都是一个唯一的日期。每个单元格包含一个 0或1取决于用户id和日期是否在原始数据帧中共享一行。在R

我会使用sapply和一个用户定义的函数来实现这个操作,但是在Python中,我很难找到一个解决方案。你知道吗

我的用户ID数组表示为

user_names= dat2['user_id'].unique()

我的最后一个数据帧应该是

a8 a1 a4 a3 a15 a5
1  0  0  0  0  0
0  1  0  0  0  0
0  1  1  1  1  0
0  1  0  0  1  1

Tags: 数据用户iddataframedatea1cella3
1条回答
网友
1楼 · 发布于 2024-10-05 12:22:32

您可以在这里使用get_dummies函数:

users = data.set_index('date')['user_id']
visits = pd.get_dummies(users)

这为我们提供了一个数据帧,它使用“一个热”编码来表示用户是否在以下日期访问:

            a1  a15  a3  a4  a5  a8
date                               
2011-01-02   0    0   0   0   0   1
2011-01-05   1    0   0   0   0   0
2011-01-05   1    0   0   0   0   0
2011-01-12   0    0   0   1   0   0
2011-01-12   0    0   1   0   0   0
2011-01-12   1    0   0   0   0   0
2011-01-12   0    1   0   0   0   0
2011-01-19   0    1   0   0   0   0
2011-01-19   1    0   0   0   0   0
2011-01-19   0    0   0   0   1   0

但是日期是重复的。因此,我们根据日期索引和聚合进行分组,询问用户是否访问了该日期的任何条目:

visits.groupby(visits.index).any().astype(int)

它给出:

            a1  a15  a3  a4  a5  a8
date                               
2011-01-02   0    0   0   0   0   1
2011-01-05   1    0   0   0   0   0
2011-01-12   1    1   1   1   0   0
2011-01-19   1    1   0   0   1   0

相关问题 更多 >

    热门问题