【发布时间】:2017-03-31 02:36:59
【问题描述】:
我在 SO 上找不到任何内容。我想要做的是在我现有的数据帧上生成 4 个新列,方法是应用一个具有 4 个特定列作为输入的单独函数并返回 4 个输出列,而不是 4 个初始列。但是,该函数要求我在使用前按条件对数据帧进行切片。我一直在使用 for 循环和追加,但它非常慢。我希望有一种方法可以进行 MapReduce 式操作,它可以使用我的 DataFrame,执行 groupby 并应用我单独编写的函数。
函数有多个输出,想象一下这样的函数:
def func(a,b,c,d):
return f(a),g(b),h(c),i(d)
其中 f,g,h,i 是对输入执行的不同函数。我正在尝试做类似的事情:
import pandas as pd
df = pd.DataFrame({'a': range(10),
'b': range(10),
'c': range(10),
'd':range(10},
'e': [0,0,0,0,0,1,1,1,1,1])
df.groupby('e').apply(lambda df['x1'],df['x2'],df['x3'],df['x4'] =
func(df['a'],df['b'],df['c'],df['d']))
想知道这是否可能。如果库中还有其他功能/更有效的方法来解决这个问题,请提供建议。谢谢。
编辑:这是一个示例输出
a b c d e f g h i
--------------------------
0 0 0 0 0 f1 g1 h1 i1
1 1 1 1 1 f2 g2 h2 i2
... and so on
我喜欢这种操作方向的原因是函数的操作在执行函数之前依赖于数据中的结构(因此是 groupby)。以前,我在将数据帧切片的同时获取唯一值并对其进行迭代,然后将其附加到新的数据帧。以二次方时间运行。
【问题讨论】:
标签: python pandas dataframe lambda apply