簡體   English   中英

給定索引值的1列中的Pandas DataFrame替換值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM