Python 使用DataFrame获取标识符矩阵
我是一个新加入python的R用户。我有一些数据Python 使用DataFrame获取标识符矩阵,python,pandas,dataframe,Python,Pandas,Dataframe,我是一个新加入python的R用户。我有一些数据 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-
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
我想创建一个数据框,这样每一列都用一个唯一的用户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
您可以在此处使用
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