簡體   English   中英

遍歷數據框中的行並根據其他列更改列的值

[英]Iterate through rows in a dataframe and change value of a column based on other column

假設我有一個稱為df的數據幀,看起來像下面所示的數據幀:

Id      Place        
1        NY        
2       Berlin          
3       Paris        
4       Paris         
5       Berlin       

還有一個字典,其ID為鍵,位置為值,如下所示:

id_to_place = { 1 : "Berlin", 2: "Berlin", 3: "NY"}

我想遍歷數據幀的每一行,看看ID_to_place詞典中是否包含ID。 如果是這樣,那么我想用字典值替換該行的Place列。 例如在runninh之后,我希望輸出的代碼是:

Id      Place        
1       Berlin       
2       Berlin          
3       NY        
4       Paris         
5       Berlin       

到目前為止,我已經嘗試了以下代碼:

id_to_place = { 1 : "Berlin", 2: "Berlin", 3: "NY"}

for index,row in df.iterrows():
    id = row['id']
    place = row['place']
    for item in id_to_place:
        if item == str(id):
          df.loc[df.id =id,'place'] = id_to_place[item]

print(df)

但是,當我運行代碼時,數據框保持不變。 有誰知道為什么會這樣嗎? 感謝您的幫助!

使用Series.map替換匹配的值,然后用Series.fillna的原始列替換NaN

df['Place'] = df['Id'].map(id_to_place).fillna(df['Place'])
print (df)
   Id   Place
0   1  Berlin
1   2  Berlin
2   3      NY
3   4   Paris
4   5  Berlin

您當前的方法不起作用,因為字典中的項目是整數,並且您正在根據str(id)對其進行檢查,該結果始終返回False。 如果刪除str並僅檢查id項,則它起作用。

id_to_place = { 1 : "Berlin", 2: "Berlin", 3: "NY"}

for index,row in df.iterrows():
    id = row['id']
    place = row['place']
    for item in id_to_place:
        if item == id: # this line changed
          df.loc[df.id =id,'place'] = id_to_place[item]

print(df)

您可以根據您的字典構建一個DataFrame,以向量化的方式分配值:

df1 = pd.DataFrame(list(id_to_place.values()), index=id_to_place.keys(),
           columns=['Place'])
df.set_index('Id', inplace=True)
df.loc[df1.index] = df1.Place
df.reset_index(inplace=True)

暫無
暫無

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

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