簡體   English   中英

Pandas df 根據與不同列中的行匹配的字典中的值更改一列中的行的值

[英]Pandas df change the value of a row in one column based on a value in a dictionary matching a row in a different column

我有一個如下圖所示的 df,我想根據“代碼”更改“sic_code”的值

我創建了一個字典:

comp_dict = dict(zip(sic_dict_keys, sic_dict_values))

並在想這樣的事情,但后來卡住了。 如果代碼在我的字典中,我基本上想更改 sic_code 的值,例如將代碼 1611787 的 sic_code 2834 更改為 3000

for key in comp_dict:
    if df.loc[df["code"] == key]:

在此處輸入圖像描述

Pandas DataFrame s 有一個replace方法來完成這個操作:

import pandas as pd

df = pd.DataFrame(data={'a': [1, 2, 3], 'b': [100, 200, 300]})
rename_dict = {100: 1000, 200: 2000}

df['b'].replace(rename_dict, inplace=True)

print(df)

這導致:

   a     b
0  1  1000
1  2  2000
2  3   300

如果您希望返回副本,則可以省略inplace=True

我不確定你想做什么,我寫了代碼,如果一行有一個 sic_code 對應於 comp_dict 的鍵,則 sic_code 更改為 comp_dict 的對應值。 告訴我我是否弄錯了。 對於循環,我寧願迭代 dataframe 而不是字典。 例如,通過使用iterrowsiloc ,一個簡單的循環可能如下所示:

for index, row in df.iterrows():
   sic_code = row['sic_code']
   if sic_code in comp_dict.keys():
      df.iloc[index, <index of column sic_code>] = comp_dict[sic_code] 

在這里,如果您的 dict 包含 {2834: 3000},則所有 sic_code 值為 2834 的行都將更改為 30000。

這是解決問題的兩步方法。 首先,找到存在於 code-to-sic 代碼字典中的數據框條目。 其次,使用.map() function 更新 sic 代碼:

df = (pd.DataFrame(
    {'code': [1611787, 170846, 142529],
     'name': ['Advanced', 'Perth', 'ATA Creativity'],
     'sic_code': [2834, 6221, 8200]})
      .set_index('code')
     )

# key is `code`; value is `sic_code`
comp_dict = {1611787: 3000}

# find data frame entries such that `code` is in the dictionary
mask = df.index.isin(comp_dict)

# update `sic_code`
df.loc[mask, 'sic_code'] = df.index[mask].map(comp_dict)
df

生成的數據框是:

                   name  sic_code
code                             
1611787        Advanced      3000
170846            Perth      6221
142529   ATA Creativity      8200

我讓它按我想要的方式工作,但我不知道它是否最有效。

for index, row in df.iterrows():
        print(row['code'], row['sic_code'])
        for key in comp_dict:
            # print(key)
            if row['code'] == key:
                df['sic_code'][index] = comp_dict[key]

暫無
暫無

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

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