【发布时间】:2018-11-22 15:34:51
【问题描述】:
我正在尝试按行(轴 = 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
【问题讨论】:
-
你能添加一些数据样本吗?
-
欢迎来到 StackOverflow。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题。 how to ask a good question 上的这些提示也可能有用。
-
好的,请稍等,谢谢。
-
在 [10] 中:将 pandas 导入为 pd 在 [11] 中:将 numpy 导入为 np 在 [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): ...:返回 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
-
请编辑问题:)
标签: python pandas dataframe apply