筛选DataFrame中列内嵌套列表数量超4的行并拆分数据集
问题描述
现有如下Pandas DataFrame(df):
name list 0 kfjh [[a,b,c],[d,f,h],[g,k,l]] 1 jhkg [[a,b,c],[d,f,h],[g,k,l],[f,k,j]] 2 khfg [[a,b,c],[g,k,l]] 3 khkjgr [[a,b,c],[d,f,h]] 4 kjrgjg [[d,f,h]] 5 jkdgr [[a,b,c],[d,f,h],[g,k,l], [g,j,l],[f,l,p]] 6 hgyr [[a,b,c],[d,kf,h],[g,k,l], [g,j,l],[f,l,p]] 7 jkgtjd [[f,l,p]] 8 nkjgrd [t,t,i]
需求:筛选出list列中外层嵌套列表数量超过4的行组成df1,剩余行组成df2。
解决方案
通过Pandas的apply方法计算每个list元素的长度,再用布尔索引完成筛选:
import pandas as pd # 构造符合需求的示例DataFrame(修正原数据中括号不匹配问题) data = { 'name': ['kfjh', 'jhkg', 'khfg', 'khkjgr', 'kjrgjg', 'jkdgr', 'hgyr', 'jkgtjd', 'nkjgrd'], 'list': [ [['a','b','c'],['d','f','h'],['g','k','l']], [['a','b','c'],['d','f','h'],['g','k','l'],['f','k','j']], [['a','b','c'],['g','k','l']], [['a','b','c'],['d','f','h']], [['d','f','h']], [['a','b','c'],['d','f','h'],['g','k','l'], ['g','j','l'],['f','l','p']], [['a','b','c'],['d','kf','h'],['g','k','l'], ['g','j','l'],['f','l','p']], [['f','l','p']], ['t','t','i'] ] } df = pd.DataFrame(data) # 生成筛选条件:list列元素长度大于4 mask = df['list'].apply(len) > 4 # 拆分得到目标DataFrame df1 = df[mask] df2 = df[~mask]
结果验证
df1输出:
name list 5 jkdgr [[a, b, c], [d, f, h], [g, k, l], [g, j, l], ... 6 hgyr [[a, b, c], [d, kf, h], [g, k, l], [g, j, l], ...
df2输出:
name list 0 kfjh [[a, b, c], [d, f, h], [g, k, l]] 1 jhkg [[a, b, c], [d, f, h], [g, k, l], [f,... 2 khfg [[a, b, c], [g, k, l]] 3 khkjgr [[a, b, c], [d, f, h]] 4 kjrgjg [[d, f, h]] 7 jkgtjd [[f, l, p]] 8 nkjgrd [t, t, i]
内容的提问来源于stack exchange,提问作者user20777609
相关产品推荐
相关产品推荐

