将函数返回的列表展开到多个列(Pandas)

时间:2017-08-03 21:52:25

标签: python python-3.x pandas dataframe

我有一个函数,我试图调用数据帧的每一行,我希望它返回20个不同的数值,每个数值都在原始数据帧的一个单独的列中。

例如,这不是函数,但如果这将起作用,那么实际的函数将

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

所以这只会返回相同的数字5x。所以如果我有数据框

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

从pandas 0.23开始,您可以使用result_type参数:

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

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

df.apply(doStuff, axis=1, result_type='expand')