Python 用列表展开列

Python 用列表展开列,python,pandas,list,Python,Pandas,List,我有一个数据框,其中一行如下所示: a b c d e 1 [2,4] [2,7] apple orange 我知道如何在一个列表列中执行此操作,但不确定在多个列表列中如何更改。基本上,我希望根据每个列表中的元素数量将数据帧扩展为n行。在包含列表的列之间,数字始终相等。因此,上述示例将变成: a b c d e 1 2 2 apple orange 1 4 7 apple orange 有趣的是,一个简单的问题可

我有一个数据框,其中一行如下所示:

a   b   c   d   e
1   [2,4]   [2,7]   apple   orange
我知道如何在一个列表列中执行此操作,但不确定在多个列表列中如何更改。基本上,我希望根据每个列表中的元素数量将数据帧扩展为n行。在包含列表的列之间,数字始终相等。因此,上述示例将变成:

a   b   c   d   e
1   2   2   apple   orange
1   4   7   apple   orange

有趣的是,一个简单的问题可能很难解决:

(pd.DataFrame(df.loc[0,['b','c']].to_list(), columns=['b','c'])
   .join(df.loc[df.index.repeat(len(df.loc[0,'b'])),['a','d','e']].reset_index(drop=True))
)

使用
分解
得出解决方案的另一种方法:

ndf = pd.concat([df.explode('c').drop('b', axis=1), df.explode('b').drop('c', axis=1)], axis=1)

ndf.loc[:,~ndf.columns.duplicated()]

如果此解决方案适用于真正的
数据帧
,我不是舒尔。在我看来,这只适用于简单的示例数据

将熊猫作为pd导入
输入io
t='''
a、b、c、d、e
1[2,4,5][2,7,2]苹果橙“
#使用“b”和“c”中的列表设置数据帧。
df=pd.read_csv(io.StringIO(t),sep='\s+',converters={'b':eval,'c':eval})
df.应用(pd.系列爆炸)
输出:

abcde
0 1 2 2苹果橙
0 1 4 7苹果橙
0 1 5 2苹果橙

结果很有趣。我想做一些类似的事情,但我想会有一种类似于“爆炸”的方法,我不知道。谢谢你,伙计!