Python 如何将集合和列表拆分为行

Python 如何将集合和列表拆分为行,python,pandas,dataframe,Python,Pandas,Dataframe,在上面的pd.DataFrame中有两列是集合/列表。我如何有效地分离这样的列,使集合/列表的每个元素位于由第一列user\u id索引的单行中 例如: user_id,category_id 4,2 4,3 4,4 ... 5,3 5,8 ... 将pd.Series应用于category\u id列,将列表拆分为单独的列,然后将结果连接到user\u id列 然后,只需将结果熔化,并在user\u id上对最终值进行排序,然后在需要时对category\u id进行排序 # Sample

在上面的
pd.DataFrame
中有两列是集合/列表。我如何有效地分离这样的列,使集合/列表的每个元素位于由第一列
user\u id
索引的单行中

例如:

user_id,category_id
4,2
4,3
4,4
...
5,3
5,8
...

pd.Series
应用于
category\u id
列,将列表拆分为单独的列,然后将结果连接到
user\u id

然后,只需将结果熔化,并在
user\u id
上对最终值进行排序,然后在需要时对
category\u 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

它们都一样长吗?你试过什么吗?没有。我认为像
.iterrow
这样对每一行进行迭代是可行的,但这可能不是解决此类问题的最佳方法。@JamesWong我通常不会回答这样的问题,因为你没有提供任何示例数据(请不要包括屏幕截图…)而且你自己也没有做出任何努力。请检查并确认。感谢您提供的解决方案。我应该包括代码。我在这里比较新,所以我对规则不太熟悉。很抱歉。这在大小相同的集合/列表中非常有效,但如果不是这样,则会创建大量的NAN。我知道这主要是因为我没有很好地描述这个问题。无论如何,谢谢。在对值进行排序之前插入以下内容:
.dropna(subset=['category\u id'])
虽然有点晚,但您可能仍然希望编辑问题以删除屏幕截图,提供一个小数据样本(例如,
df=pd.DataFrame({'user\u id':[0,1],'category\u id':[0,1,2,3,4],[1,2,3]])
),包括你最初的尝试。还包括给定样本数据的预期结果。