栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

“拆开”一个包含多行列表的pandas列

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

“拆开”一个包含多行列表的pandas列

更新: 通用矢量化方法-也适用于多列DF:

假设我们有以下DF:

In [159]: dfOut[159]:   a          b  c0  1     [1, 2]  51  2  [2, 3, 4]  62  3        [5]  7

解:

In [160]: lst_col = 'b'In [161]: pd.Dataframe({     ...:     col:np.repeat(df[col].values, df[lst_col].str.len())     ...:     for col in df.columns.difference([lst_col])     ...: }).assign(**{lst_col:np.concatenate(df[lst_col].values)})[df.columns.tolist()]     ...:Out[161]:   a  b  c0  1  1  51  1  2  52  2  2  63  2  3  64  2  4  65  3  5  7

设定:

df = pd.Dataframe({    "a" : [1,2,3],    "b" : [[1,2],[2,3,4],[5]],    "c" : [5,6,7]})

向量化NumPy方法:

In [124]: pd.Dataframe({'a':np.repeat(df.a.values, df.b.str.len()),  'b':np.concatenate(df.b.values)})Out[124]:   a  b0  1  11  1  22  2  23  2  34  2  45  3  5

旧答案:

尝试这个:

In [89]: df.set_index('a', append=True).b.apply(pd.Series).stack().reset_index(level=[0, 2], drop=True).reset_index()Out[89]:   a    00  1  1.01  1  2.02  2  2.03  2  3.04  2  4.05  3  5.0

或@Boud提供的更好的解决方案:

In [110]: df.set_index('a').b.apply(pd.Series).stack().reset_index(level=-1, drop=True).astype(int).reset_index()Out[110]:   a  00  1  11  1  22  2  23  2  34  2  45  3  5


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429142.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号