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]])
),包括你最初的尝试。还包括给定样本数据的预期结果。