Pandas 包含两列之间最小差值的行-不带groupby
在由…生成的示例数据中Pandas 包含两列之间最小差值的行-不带groupby,pandas,Pandas,在由…生成的示例数据中 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())] 但是,删除gro
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
using以获取相应的df.iloc
:
df.apply(lambda x:abs(x.A-x.B).idxmin())
抛出错误AttributeError:'Series'对象没有属性“A”
df.apply(lambda x:abs(x['A']-x['B']).idxmin())
抛出另一个错误类型keyrerror:'A'
在不使用
groupby
的情况下,获得最小差值的正确代码是什么?执行应用时,必须提供其应循环的轴。默认情况下,它会一列接一列地显示,因此会显示您收到的消息
以下工作将起作用:
df.apply(λx:abs(x['A']-x['B']),轴=1.idxmin()
但是,不需要使用lambda,您可以执行以下操作:
abs(df['A']-df['B']).idxmin()
或
(df['A']-df['B']).abs().idxmin()
这两种方法都比使用应用程序快得多。两种
abs
和apply
都没有矢量化。您应该只执行df.loc[(df.A-df.B.abs().idxmin()]
Thx。知道为什么1)和2)给出不同的错误代码吗?