我正在尝试根据groupby的另一列获取值最接近5的行。
假设groupby列称为“ ticker”,“ apply”列称为“ YTC”。报价器有多个相同的值。
类似的解决方案如下所示。我想找到最接近5的数字,而不是最大值。
df1.groupby("Ticker")["YTC"].max())
理想情况下,代码将输出最接近5的'Ticker'值的数据帧。
答案 0 :(得分:1)
可以通过排序+ groupby
来实现,而无需drop_duplicates
。
import pandas as pd
import numpy as np
np.random.seed(123)
df = pd.DataFrame({'Ticker': list('aabbccddeeeeefff'),
'YTC': np.random.randint(1,10,16)})
df[['Ticker', 'YTC']].assign(delta=(df.YTC-5).abs()).sort_values('delta').drop_duplicates('Ticker').drop(columns='delta')
# Ticker YTC
#12 e 5
#15 f 5
#4 c 4
#0 a 3
#2 b 7
#6 d 2
索引是发生最接近值的行的DataFrame
的原始索引,这很有用。