我有一個看起來像的資料集
| 價值 |
|---|
| 34 |
| 45 |
| 3 |
| -3 |
我想計算這個資料集的值的比率,即值與下一個值的比率: 34/45 , 45/3, 3/-3
我可以通過myDataset["value"]/myDataset["value"].shift(-1)
下一步更復雜,這就是我掙扎的地方。我需要計算相同的比率,但是對于選定的一組值。選擇的標準是值應該大于前一個。即這次結果資料集應該只包含 45/3。我從
myDataset.loc[(myDataset["value"] > myDataset["value"].shift(1)),"value] / myDataset.loc[(myDataset["value"] > myDataset["value"].shift(1)),"value].shift(-1)
但這不是我想要的,因為 myDataset.loc 更改了資料集本身,因此由此找到的下一個值并不是真正的下一個,而是下一個符合 () 中的條件的值。雖然我真的需要原始資料集中的下一個值。
我該怎么做?
更新
看來我的描述有點誤導。如果我有 a、b、c、d 的串列,那么我想回傳
c/b 如果 b>a
d/c 如果 c>b
如果 c>b,我不想回傳 c/b,它非常簡單。
uj5u.com熱心網友回復:
只需制作一個新的移位列,然后使用它:
df['shifted'] = df.value.shift(-1)
print(df.value/df.shifted)
print()
print(df.apply(lambda x: x.value/x.shifted if x.value > x.shifted else None, axis=1))
輸出:
0 0.755556
1 15.000000
2 -1.000000
3 NaN
dtype: float64
0 NaN
1 15.0
2 -1.0
3 NaN
dtype: float64
uj5u.com熱心網友回復:
代碼
value = df.value
diff = value.diff()
div = value.shift(-1) / value
div[value.diff() > 1]
輸出
1 0.066667
解釋
diff()相當于value - value.shift()div保持比例c/b
uj5u.com熱心網友回復:
在更新的問題之后,您可以壓縮三個專案而不是兩個專案。
您可以使用串列推導來執行此操作(這將僅回傳滿足條件的比率):
[b/c for a, b, c in zip(df["value"].shift(2), df["value"].shift(1), df["value"]) if a>b]
#Out:
#[-1.0]
唯一有效的選項是 43/3,所以唯一的比率是 3/-3=-1
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471420.html
