我正在尝试为每个价格列查找当天可用的下一个最便宜的产品。我的数据看起来像这样
data = [['29/10/18', 400, 300, 200],
['29/10/18', 250, 400, 100],
['29/10/18', 600, 600, 300],
['30/10/18', 300, 500, 100]]
df = pd.DataFrame(data, columns = ['date', 'price 1', 'price2', 'price3'])
我的输出看起来像这样
date price1 nearestPrice1 price2 nearestPrice2
29/10/18 400 250 300 400
29/10/18 250 400 400 300
29/10/18 600 400 600 400
答案 0 :(得分:1)
f = lambda row, col: df.loc[df[df['date'] == row['date']][col].sub(row[col])\
.abs().nsmallest(2).idxmax(), col]
df['nearest_price1'] = df.apply(f, col = 'price 1', axis = 1)
df['nearest_price2'] = df.apply(f, col = 'price2', axis = 1)
df['nearest_price3'] = df.apply(f, col = 'price3', axis = 1)
输出:
date price 1 price2 price3 nearest_price1 nearest_price2 \
0 29/10/18 400 300 200 250 400
1 29/10/18 250 400 100 400 300
2 29/10/18 600 600 300 400 400
3 30/10/18 300 500 100 300 500
nearest_price3
0 100
1 200
2 200
3 100
说明:
使用lambda函数f,将此函数应用于每列(price 1
,price2
,price3
),然后获取结果。
它的工作方式如下:
答案 1 :(得分:0)
如果我正确理解了这一点,则需要找到给定一天中最便宜的价格,从最便宜的到最便宜的,依此类推……
这意味着您需要首先提取给定日期的所有价格。您可以使用简单的for循环来执行此操作,例如,如果第一列中的文本为“ 29/10/18”,则将其余各列中的数据添加到列表中,或从中创建一个新的DataFrame。无论哪种情况,一旦获得了所有数据的价格,便可以使用熊猫提供的.sort_values函数,并指定您要使其升序。 Function documentation