python pandas DataFrame.apply:返回一个系列而不是一个数据帧

时间:2018-06-13 06:46:30

标签: python pandas dataframe apply

我正在尝试以行方式(轴= 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

1 个答案:

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