我有一个函数,我试图调用数据帧的每一行,我希望它返回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
答案 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')