2017-08-03 46 views
0

我有一个函数,我试图调用数据框的每一行,我希望它返回20个不同的数值,并且每个数值都在原始数据框的单独列。将函数返回的列表展开为多列(Pandas)

例如,这是没有的功能,但如果这会工作的实际人会

def doStuff(x): 
    return([x] * 5) 

因此,这将只返回相同数量的5倍。所以,如果我有数据帧

import pandas as pd 

df = pd.DataFrame({'A' : [1,2]}) 
    A 
0 1 
1 2 
2 3 

调用

df = np.vectorize(doStuff)(df['A']) 

后它应该结束了看起来像

A 1 2 3 4 5 
0 1 1 1 1 1 1 
1 2 2 2 2 2 2 
2 3 3 3 3 3 3 

回答

2

我相信你需要df.apply,两次。

In [1254]: df['A'].apply(np.vectorize(doStuff)).apply(pd.Series) 
Out[1254]: 
    0 1 2 3 4 
0 1 1 1 1 1 
1 2 2 2 2 2 
2 3 3 3 3 3 

您可能会与原来的使用pd.concat(..., axis=1)串连这样的:

In [1258]: pd.concat([df, df['A'].apply(np.vectorize(doStuff)).apply(pd.Series)], axis=1) 
Out[1258]: 
    A 0 1 2 3 4 
0 1 1 1 1 1 1 
1 2 2 2 2 2 2 
2 3 3 3 3 3 3 
+0

@COLDSPEED非常感谢。这工作完美 – Kristofersen