【问题标题】:pandas apply with parameter list熊猫应用参数列表
【发布时间】:2019-11-10 19:21:36
【问题描述】:

我有一个简单的 DataFrame 对象:

df = pd.DataFrame(np.random.random_sample((5,5)))
df["col"] = ["A", "B", "C", "A" ,"B"]

#simple function
def func_apply(df,param=1):
    pd.Series(np.random(3)*param,name=str(param))

现在将函数结果应用到预期的 DataFrame 中

df.groupby('col').apply(func_apply)

    1           0         1         2
col                              
A    0.928527  0.383567  0.085651
B    0.567423  0.668644  0.689766
C    0.301774  0.156021  0.222140

有没有办法将参数列表传递给 groupby 以获得类似的东西?

#Pseudocode...
df.groupby('col').apply(func_apply, params=[1,2,10])

    1           0         1         2
par col                              
1    A    0.928527  0.383567  0.085651
1    B    0.567423  0.668644  0.689766
1    C    0.301774  0.156021  0.222140
2    A    0.526494  1.812780  1.515816
2    B    1.180539  0.527171  0.670796
2    C    1.507721  0.156808  1.695386
10   A    7.986563  5.109876  2.330171
10   B    2.096963  6.804624  2.351397
10   C    6.890758  8.079466  1.725226

非常感谢任何提示:)

【问题讨论】:

  • 所以你想“重复”子数据框,对吧?
  • 那是伪代码。我想在数据框上应用具有不同参数的函数。所以基本上是第一个结果与不同参数的组合。现在我只添加了一个,但在我的用例中,还有更多。我知道如果参数在 DataFrame 内,这将起作用,那么它可以通过语句添加到组中。PS:希望很清楚。刚刚添加了预期的df。这些值随着参数值的增加而增加。

标签: python pandas dataframe pandas-groupby split-apply-combine


【解决方案1】:

IIUC,

apply 允许附加参数。您需要将其作为keyword 或使用带有元组的args 的位置参数传递。您如何使用传递的参数取决于您的想象。即,这取决于您如何编写应用func 来利用它们来获得所需的输出。

让我们获取您的样本数据。我将您的func_apply 修改如下,以使用附加的params 对每个组进行顺序处理,并将它们组合成最终输出:

def func_apply(df,params=[1]):
     d = [pd.Series(np.random.random(3), name=str(par),index=['x', 'y', 'z']) for par in params]
     return pd.DataFrame(d)

现在调用 apply func_apply 并将 [1, 2, 10] 传递给它(我使用 keyword 传递 params):

df.groupby('col').apply(func_apply, params=[1, 2, 10])

Out[1102]:
               x         y         z
col
A   1   0.074357  0.850912  0.652096
    2   0.307986  0.267658  0.558153
    10  0.351000  0.743816  0.192400
B   1   0.179359  0.411784  0.535644
    2   0.905294  0.696661  0.794458
    10  0.635706  0.742784  0.963603
C   1   0.020375  0.693070  0.225971
    2   0.448988  0.288206  0.715875
    10  0.980669  0.474264  0.036715

不传递params,应用回退到默认值:

df.groupby('col').apply(func_apply)

Out[1103]:
              x         y         z
col
A   1  0.499484  0.175008  0.331594
B   1  0.052399  0.965129  0.649668
C   1  0.053869  0.297008  0.793262

【讨论】:

    猜你喜欢
    • 2019-02-07
    • 2022-10-20
    • 2015-07-31
    • 2019-10-12
    • 2017-03-14
    • 2016-09-17
    • 1970-01-01
    • 2017-08-09
    • 2021-06-05
    相关资源
    最近更新 更多