Python:使用列中的数组展平

Python:使用列中的数组展平,python,arrays,performance,pandas,numpy,Python,Arrays,Performance,Pandas,Numpy,我有一个pandas数据帧,其中一列包含数组。我想通过为数组的每个元素重复其他列的值来“展平”它 我通过迭代每一行来构建一个临时值列表,成功地实现了这一点,但它使用的是“纯python”,而且速度很慢 有没有一种方法可以在pandas/numpy中实现这一点?换句话说,我尝试改进下面示例中的展平函数 非常感谢 toConvert = pd.DataFrame({ 'x': [1, 2], 'y': [10, 20], 'z': [(101, 102, 103), (201

我有一个pandas数据帧,其中一列包含数组。我想通过为数组的每个元素重复其他列的值来“展平”它

我通过迭代每一行来构建一个临时值列表,成功地实现了这一点,但它使用的是“纯python”,而且速度很慢

有没有一种方法可以在pandas/numpy中实现这一点?换句话说,我尝试改进下面示例中的展平函数

非常感谢

toConvert = pd.DataFrame({
    'x': [1, 2],
    'y': [10, 20],
    'z': [(101, 102, 103), (201, 202)]
})

def flatten(df):
    tmp = []
    def backend(r):
        x = r['x']
        y = r['y']
        zz = r['z']
        for z in zz:
            tmp.append({'x': x, 'y': y, 'z': z})
    df.apply(backend, axis=1)
    return pd.DataFrame(tmp)

print(flatten(toConvert).to_string(index=False))
其中:

x   y    z
1  10  101
1  10  102
1  10  103
2  20  201
2  20  202
要创建列
x
y
,以及
z
,您需要使用:


这是一个基于NumPy的解决方案-

np.column_stack((toConvert[['x','y']].values.\
     repeat(map(len,toConvert.z),axis=0),np.hstack(toConvert.z)))
样本运行-

In [78]: toConvert
Out[78]: 
   x   y                z
0  1  10  (101, 102, 103)
1  2  20       (201, 202)

In [79]: np.column_stack((toConvert[['x','y']].values.\
    ...:      repeat(map(len,toConvert.z),axis=0),np.hstack(toConvert.z)))
Out[79]: 
array([[  1,  10, 101],
       [  1,  10, 102],
       [  1,  10, 103],
       [  2,  20, 201],
       [  2,  20, 202]])
In [78]: toConvert
Out[78]: 
   x   y                z
0  1  10  (101, 102, 103)
1  2  20       (201, 202)

In [79]: np.column_stack((toConvert[['x','y']].values.\
    ...:      repeat(map(len,toConvert.z),axis=0),np.hstack(toConvert.z)))
Out[79]: 
array([[  1,  10, 101],
       [  1,  10, 102],
       [  1,  10, 103],
       [  2,  20, 201],
       [  2,  20, 202]])