您需要向数据框中添加行,如果价格列中的值差异大于 1,则在新行中写入“缺失”价格(即价格步长应该为 1)。用零填充剩余的单元格。我解决了这个问题,但在我看来应该有一种更优雅的方式:
def new_price(x): # Ф-ция получает построчно значения из price и diff_pr
if x.iloc[0] > 1: # Если разница между ценами больше 1
incr = 1
for i in range(x.iloc[0] - 1): # Количество строк которые нужно добавить из ходя из разницы между price
df.loc[len(df)] = [0, x.iloc[1] + incr, 0] # Обращаемся к price на строке в которой найдена разница более 1
incr += 1 # Добавляем новую строку где price +1
df = pd.DataFrame({'vol': [2, 3, 8], 'price': [5, 3, 10]}).sort_values(by='price', ascending=False)
df['diff_pr'] = df['price'].diff().fillna(0).abs().astype('int')
df[['diff_pr', 'price']].apply(new_price, axis=1)
df = df.sort_values(by='price', ascending=False)
print(df)
回答:
vol price diff_pr
2 8 10 0
6 0 9 0
5 0 8 0
4 0 7 0
3 0 6 0
0 2 5 5
7 0 4 0
1 3 3 2