您需要向数据框中添加行,如果价格列中的值差异大于 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
没有柱子
diff_pr
——似乎不需要,它是辅助的。我们通过价目表中从最小值到最大值的范围创建一系列数字,通过 与框架合并
outer
,用零替换 NaN,排序。一般来说,其含义与 的答案相同
@Алексей Р
,但通过索引并且不合并。在我看来,这样会更快。但这还不确定