在由...生成的样本数据中
np.random.seed(2020)
sz = 20
df = pd.DataFrame(np.random.randn(sz, 2), index=range(sz), columns=list('AB'))
df.insert(0, 'Item', 'X')
...以获取包含差异最小值的行,此行将正确运行:
df.iloc[df.groupby('Item').apply(lambda x: abs(x['A'] - x['B']).idxmin())]
但是,删除groupby
以获取相应的df.iloc
:
df.apply(lambda x: abs(x.A - x.B).idxmin())
引发错误 AttributeError: 'Series' object has no attribute 'A'
df.apply(lambda x: abs(x['A']- x['B']).idxmin())
引发另一个错误类型KeyError: 'A'
!
为什么会这样呢?
不使用而获得差的最小值的正确代码是什么groupby
?
进行应用时,您必须提供轴,该轴应该循环。默认情况下,它将逐列显示,因此您将收到消息。
以下将起作用: df.apply(lambda x: abs(x['A']- x['B']), axis=1).idxmin()
但是,不需要使用lambda,您可以执行以下操作:abs(df['A']- df['B']).idxmin()
或(df['A']- df['B']).abs().idxmin()
两者都比使用apply快得多。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句