程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了“拆开”一个包含多行列表的pandas列大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决“拆开”一个包含多行列表的pandas列?

开发过程中遇到“拆开”一个包含多行列表的pandas列的问题如何解决?下面主要结合日常开发的经验,给出你关于“拆开”一个包含多行列表的pandas列的解决方法建议,希望对你解决“拆开”一个包含多行列表的pandas列有所启发或帮助;

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

假设我们有以下DF:

In [159]: df
Out[159]:
   a          b  c
0  1     [1, 2]  5
1  2  [2, 3, 4]  6
2  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  c
0  1  1  5
1  1  2  5
2  2  2  6
3  2  3  6
4  2  4  6
5  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  b
0  1  1
1  1  2
2  2  2
3  2  3
4  2  4
5  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    0
0  1  1.0
1  1  2.0
2  2  2.0
3  2  3.0
4  2  4.0
5  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  0
0  1  1
1  1  2
2  2  2
3  2  3
4  2  4
5  3  5

解决方法

说我有以下pandas数据框:

df = pd.DataFrame({"a" : [1,2,3],"b" : [[1,2],[2,3,4],[5]]})
   a          b
0  1     [1,2]
1  2  [2,4]
2  3        [5]

我如何“堆叠”“ b”列中的列表以将其转换为数据框:

   a  b
0  1  1
1  1  2
2  2  2
3  2  3
4  2  4
5  3  5

大佬总结

以上是大佬教程为你收集整理的“拆开”一个包含多行列表的pandas列全部内容,希望文章能够帮你解决“拆开”一个包含多行列表的pandas列所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。