簡體   English   中英

Pandas:無法根據其他列上的條件設置單元格值

[英]Pandas: Not able to set a cell value based on a condition on other column

我有一個 dataframe 如下:

ID   Score   Bid_Doc_ID
1      67       3
2      -1       2
3      -1       7

我想將Bid_Doc_ID字段設置為 -1 其中Score == -1

為此,我使用以下代碼:

df = df.loc[df['Score']==-1,'Bid_Doc_ID']=-1

我收到以下錯誤:

AttributeError: 'int' object has no attribute 'loc'

即使我嘗試過:

df = df.loc[df['Score'].astype(str)==-1,'Bid_Doc_ID']=-1

仍然得到同樣的錯誤。

我的預期結果:

ID   Score   Bid_Doc_ID
1      67        3
2      -1       -1
3      -1       -1

這個問題似乎很微不足道,但有些我錯過了一些東西!

嘗試刪除分配新df的代碼部分:

df = df.loc[df['Score']==-1,'Bid_Doc_ID']=-1 # change
df.loc[df['Score']==-1,'Bid_Doc_ID']=-1 # to be this

或者,另一種選擇是,您可以使用np.where獲得所需的東西?

import numpy as np
df['Bid_Doc_ID'] = np.where(df['Score'] == -1, -1, df['Bid_Doc_ID'])

當您運行df = df.loc[df['Score'].astype(str)==-1,'Bid_Doc_ID']=-1時,看起來您用 integer 或 boolean 覆蓋了您的 df (這就是為什么'int' object has no attribute 'loc'錯誤)。 嘗試檢查 df 的值來驗證這一點。

如果您在適當的位置修改 DF 會發生很多事情,這絕不是一個好主意,最好將修改后的 dataframe 分配給一個新變量,例如df_fixed ,它會為您節省大量調試時間,甚至更糟,發布生產中的錯誤。

試試下面的,不是太簡潔,但是它使用純pandas方法和方法鏈接,這是這幾天推薦的方式。


bid_doc_id_fixed = df.apply(lambda x: -1 if x['Score'] == -1 else x['Bid_Doc_ID'], axis=1)

df_fixed = df.assign(Bid_Doc_ID=bid_doc_id_fixed)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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