![](/img/trans.png)
[英]How to replace a value in a Pandas Dataframe Index with another given a date range?
[英]Pandas DataFrame replace value in 1 column given an index value
這似乎很簡單。 但是我已經嘗試了幾種不同的方法,並且閱讀了可能有關的12個StackOverflow問題。
我有加密貨幣(比特幣等)的市場數據。 訂單簿是給定貨幣的所有“詢問”和“出價”的列表。 我想將數據存儲在Pandas DataFrame中。 (我並不只是在使用DF,因為它可能會簡化繪制路線的工作。)
因此,現在的設置是一個DataFrame,其中Rate(價格)是Index,它是一個float。 在該價格下可用的硬幣數量在名為Amt的列中。
當我以給定的匯率更新金額時,我想簡單地替換該值。 在所有可能的解決方案中,我發現此選項對我來說是最直觀的:
df.Amt[df.Rate == rate] = new_amt
雖然我沒有從中得到任何錯誤,但是當我檢查Amt是否更改時,我發現它沒有更改。 我認為這是復制/切片問題之一,而不是在DataFrame本身上工作。
例:
df.head()
Out[77]:
Rate Amt
0 0.018021 0.319033
1 0.018009 29.994000
2 0.017999 28.121000
3 0.018042 2.233781
4 0.018055 13.433394
df.Amt[df.Rate == 0.018021] = 20
df.head()
Out[79]:
Rate Amt
0 0.018021 0.319033
1 0.018009 29.994000
2 0.017999 28.121000
3 0.018042 2.233781
4 0.018055 13.433394
我想念什么? 過去,我曾與DF一起更改過整列,但通常不更改一列。
更正錯誤並合並@JohnE的注釋
你被訪問pd.Series
與對象df.Amt
與切片它[df.Rate == 0.018021]
當您想要的是將布爾數組傳遞給loc
並進行分配時。
df.loc[np.isclose(df.Rate, 0.018021), 'Amt'] = 20
Rate Amt
0 0.018021 20.000000
1 0.018009 29.994000
2 0.017999 28.121000
3 0.018042 2.233781
4 0.018055 13.433394
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.