我正在尝试以行方式(轴= 1)将函数应用于DataFrame,并且当应用函数返回一个系列时,'apply'的最终返回值将是一个数据帧,这不是我的想。 我在这里找到了类似的问题,Returning multiple values from pandas apply on a DataFrame,但是这种情况是关于将函数应用于groupby。 在非组的情况下,即使返回的一系列应用函数的长度不同,也会返回一个数据帧。
In [10]: import pandas as pd
In [11]: import numpy as np
In [12]: df = pd.DataFrame({'start': [1, 2, 3], 'end': [7, 9, 9]})
In [13]: df
Out[13]:
end start
0 7 1
1 9 2
2 9 3
In [14]: def fun(df):
...: return pd.Series(np.arange(df['start'], df['end'], 1))
...:
In [15]: df.apply(fun, axis=1)
Out[15]:
0 1 2 3 4 5 6
0 1.0 2.0 3.0 4.0 5.0 6.0 NaN
1 2.0 3.0 4.0 5.0 6.0 7.0 8.0
2 3.0 4.0 5.0 6.0 7.0 8.0 NaN
然而,我想要的是这样的(层次系列):
Out[23]:
0 0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
5 6.0
1 0 2.0
1 3.0
2 4.0
3 5.0
4 6.0
5 7.0
6 8.0
2 0 3.0
1 4.0
2 5.0
3 6.0
4 7.0
5 8.0
dtype: float64
答案 0 :(得分:0)
此处 RouteCollection {#556 ▼
#routes: []
#allRoutes: []
#nameList: []
#actionList: []
}
将值转换为apply
设计,因此可能的解决方案使用stack
:
DataFrame
或s = df.apply(fun, axis=1).stack()
print (s)
0 0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
5 6.0
1 0 2.0
1 3.0
2 4.0
3 5.0
4 6.0
5 7.0
6 8.0
2 0 3.0
1 4.0
2 5.0
3 6.0
4 7.0
5 8.0
dtype: float64
与concat
:
list comprehension