如何将 Pandas DataFrame 转换为 table 向量

How to turn a Pandas DataFrame into a table of vectors

我有一个两列 Pandas 数据框,其中包含 user_ids 的列表和他们访问过的一些 URL。它看起来像这样:

    users   urls
0   user1   url1
1   user1   url3
2   user1   url5
3   user2   url2
4   user2   url4
5   user2   url5
6   user3   url1
7   user3   url4
8   user3   url5

我想创建自己的矢量表示,如下所示:

        url1    url2    url3    url4    url5
user1   1.0     NaN     1.0     NaN     1.0
user2   NaN     1.0     NaN     1.0     1.0
user3   1.0     NaN     NaN     1.0     1.0

我尝试过不同的方法,但总是碰壁。有什么想法吗?

重现您的问题:

df = pd.DataFrame([
               ['user1', 'url1'], 
               ['user1', 'url3'], 
               ['user1', 'url5'],
               ['user2', 'url2'],
               ['user2', 'url4'],
               ['user2', 'url5'],
               ['user3', 'url1'],
               ['user3', 'url4'],
               ['user3', 'url5']
               ], columns=['users', 'urls'])

我为我的解决方案应用了一个 for 循环。我相信比我更有能力的人可以找到更优雅的解决方案。

new_df = pd.DataFrame()
for user in np.unique(df['users']):
   s = pd.get_dummies(df[df['users']==user]['urls']).sum()
   s.name = user
   new_df = new_df.append(s)
new_df
        url1    url3    url5    url2    url4
user1   1.0     1.0     1.0     NaN     NaN
user2   NaN     NaN     1.0     1.0     1.0
user3   1.0     NaN     1.0     NaN     1.0

如果您希望您的列被排序,您可以简单地应用这个:

new_df = pd.DataFrame(columns=np.unique(df['urls']))

这会初始化新数据框以将您的唯一网址作为列。

        url1    url2    url3    url4    url5
user1   1.0     NaN     1.0     NaN     1.0
user2   NaN     1.0     NaN     1.0     1.0
user3   1.0     NaN     NaN     1.0     1.0

您所描述的是 url 列的支点

# Make data
df = pd.DataFrame([
               ['user1', 'url1'], 
               ['user1', 'url3'], 
               ['user1', 'url5'],
               ['user2', 'url2'],
               ['user2', 'url4'],
               ['user2', 'url5'],
               ['user3', 'url1'],
               ['user3', 'url4'],
               ['user3', 'url5']
               ], columns=['users', 'urls'])
# add column to fill pivoted values
df['count'] = 1

new_df = df.pivot(index='users',columns='urls',values='count').fill_na(0)
new_df

# urls   url1  url2  url3  url4  url5
# users                              
# user1   1.0   0.0   1.0   0.0   1.0
# user2   0.0   1.0   0.0   1.0   1.0
# user3   1.0   0.0   0.0   1.0   1.0

这会将用户列放入索引中,但您可以使用 reset_index 使其再次成为常规列。