如何将集和列表拆分为行

时间:2017-08-23 03:45:46

标签: python pandas dataframe

enter image description here

上面的pbtxt中有两列是集合/列表。如何有效地分隔这样的列,使得集合/列表的每个元素都位于由第一列pd.DataFrame索引的单行中。

例如:

user_id

1 个答案:

答案 0 :(得分:1)

pd.Series应用于category_id列,将列表分成不同的列,然后将结果连接到user_id列。

然后只需熔化结果,然后根据需要对user_idcategory_id的最终值进行排序。

# Sample data.
df = pd.DataFrame({'user_id': range(2), 'category_id': [range(i, i + 3) for i in range(2)]})
# print(df)
# Output:
#    user_id category_id
# 0        0   [0, 1, 2]
# 1        1   [1, 2, 3]

# Result.
>>> (pd.melt(
         pd.concat([df['user_id'], df.category_id.apply(pd.Series)], axis=1), 
         id_vars='user_id', value_name='category_id')[['user_id', 'category_id']]
    .dropna(subset=['category_id'])  # Drop null categories.
    .sort_values(['user_id', 'category_id']))
# Output:
#    user_id  category_id
# 0        0            0
# 2        0            1
# 4        0            2
# 1        1            1
# 3        1            2
# 5        1            3