如何拆分DataFrame中的列表值,生成对应数量的独立DataFrame
拆分含列表元素的DataFrame为多份独立表的实现方案
你之前使用
explode不符合预期的原因是:explode是行向展开操作,会把每个列表元素拆分为单独的行,将原表行数放大为原来的N倍(N为列表长度),和你需要的「按列表索引位置拆分出N个结构和原表完全一致的独立表」的需求不匹配。
首先给出可直接复现的测试数据构造代码:
import pandas as pd # 构造和示例结构一致的测试DataFrame df = pd.DataFrame({ 'col1': [[1, 11], [2, 22], [3, 33]], 'col2': [[4, 44], [5, 55], [6, 66]], 'col3': [[7, 77], [8, 88], [9, 99]] })
固定2个用户的场景
直接按索引位置提取即可:
# 取所有列表第1位元素生成第一个DataFrame(索引从0开始计数) df_user1 = df.apply(lambda col: col.str[0]) # 取所有列表第2位元素生成第二个DataFrame df_user2 = df.apply(lambda col: col.str[1])
动态用户数量的通用场景
如果列表长度不固定,可批量生成所有用户的DataFrame:
# 获取每个列表的长度,即用户总数量 user_num = len(df.iloc[0, 0]) # 批量生成所有用户的DataFrame,存储在列表中按索引访问即可 user_df_list = [df.apply(lambda col: col.str[i]) for i in range(user_num)] # 调用示例:user_df_list[0]对应第一个用户的表,user_df_list[1]对应第二个用户的表
内容的提问来源于stack exchange,提问作者Lukasz
相关产品推荐
相关产品推荐

