如何合并 pandas 数据框并传递 lambda 作为第一个参数?

问题描述 投票:0回答:1

限制于 pandas 方法链接,如何在不使用管道的情况下使用带有 lambda 函数的最后一个数据帧状态来应用合并方法?

下面的代码有效。但这取决于管道方式。

(pd.DataFrame(
    [{'YEAR':2013,'FK':1, 'v':1},
     {'YEAR':2013,'FK':2, 'v':2},
     {'YEAR':2014,'FK':1, 'v':3},
     {'YEAR':2014,'FK':2, 'v':4}
    ])
  .pipe(lambda w: w.merge(w.query('YEAR==2013')[['FK','v']],
        on='FK',
        how='left'
       ))
)

下面的代码不起作用。

(pd.DataFrame(
    [{'YEAR':2013,'FK':1, 'v':1},
     {'YEAR':2013,'FK':2, 'v':2},
     {'YEAR':2014,'FK':1, 'v':3},
     {'YEAR':2014,'FK':2, 'v':4}
    ])
 .merge(lambda w: w.query('YEAR==2013'),
        on='FK',
        how='left'
       )
)

返回:

TypeError: Can only merge Series or DataFrame objects, a <class 'function'> was passed

python pandas dataframe lambda chaining
1个回答
0
投票

你不能,这正是

pipe
方法存在的原因。

为了完整起见,接受可调用的 DataFrame 方法/访问器(作为主要参数和从 pandas 2.0.3 开始)是:

对于其他情况,您需要使用

pipe

© www.soinside.com 2019 - 2024. All rights reserved.