2017-08-03 81 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