RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 961527
Accepted
keddad
keddad
Asked:2020-03-26 18:31:36 +0000 UTC2020-03-26 18:31:36 +0000 UTC 2020-03-26 18:31:36 +0000 UTC

使用来自另一个 DataFrame 的数据填充 DataFrame

  • 772

我有一个 DataFrame df_heroes和df_train,每个都有一个hero_id参数。我想遍历df_heroes,将df_heroes 框架中具有相同hero_id的角色添加到尚不存在的hero_roles列中。我正在尝试这样做:

for row in df_train.itertuples(index = False):
    row['hero_roles'] = df_heroes.loc[df_heroes["hero_id"]==row["hero_id"]].values["roles"]

但是这样做时我得到一个错误:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   3077             try:
-> 3078                 return self._engine.get_loc(key)
   3079             except KeyError:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'hero_id'

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-10-2c33f244f191> in <module>
      1 for row in df_train.itertuples(index = False):
----> 2     row['hero_roles'] = df_heroes.loc[df_heroes["hero_id"]==row["hero_id"]].values["roles"]

~\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2686             return self._getitem_multilevel(key)
   2687         else:
-> 2688             return self._getitem_column(key)
   2689 
   2690     def _getitem_column(self, key):

~\Anaconda3\lib\site-packages\pandas\core\frame.py in _getitem_column(self, key)
   2693         # get column
   2694         if self.columns.is_unique:
-> 2695             return self._get_item_cache(key)
   2696 
   2697         # duplicate columns & possible reduce dimensionality

~\Anaconda3\lib\site-packages\pandas\core\generic.py in _get_item_cache(self, item)
   2487         res = cache.get(item)
   2488         if res is None:
-> 2489             values = self._data.get(item)
   2490             res = self._box_item_values(item, values)
   2491             cache[item] = res

~\Anaconda3\lib\site-packages\pandas\core\internals.py in get(self, item, fastpath)
   4113 
   4114             if not isna(item):
-> 4115                 loc = self.items.get_loc(item)
   4116             else:
   4117                 indexer = np.arange(len(self.items))[isna(self.items)]

~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   3078                 return self._engine.get_loc(key)
   3079             except KeyError:
-> 3080                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   3081 
   3082         indexer = self.get_indexer([key], method=method, tolerance=tolerance)

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'hero_id'

我怎样才能使我的代码工作?

样本数据链接:https ://yadi.sk/d/ZAzQifMGwZphHg

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    MaxU - stop genocide of UA
    2020-03-26T18:43:13Z2020-03-26T18:43:13Z

    试试这样:

    df_train.loc[:, 'hero_roles'] = df_train['hero_id'].map(df_heroes.set_index('hero_id')['roles'])
    

    或像这样:

    df_train = df_train.merge(df_heroes[['hero_id','roles']], on='hero_id', how='left')
    

    验证提供的数据:

    df_heroes = pd.read_csv(r'D:\download\dota2_heroes.csv')
    df_train = pd.read_csv(r'D:\download\dota2_skill_train.csv')
    
    df_train = df_train.merge(df_heroes[['hero_id','roles']], on='hero_id', how='left')
    

    结果:

    In [54]: df_train[['hero_id','roles']]
    Out[54]:
           hero_id                                                   roles
    0           90             ['Support', 'Nuker', 'Disabler', 'Jungler']
    1            5             ['Support', 'Disabler', 'Nuker', 'Jungler']
    2           81  ['Carry', 'Disabler', 'Durable', 'Pusher', 'Initiat...
    3           74      ['Carry', 'Nuker', 'Disabler', 'Escape', 'Pusher']
    4           14           ['Disabler', 'Initiator', 'Durable', 'Nuker']
    5           61                  ['Carry', 'Pusher', 'Escape', 'Nuker']
    6          114            ['Carry', 'Escape', 'Disabler', 'Initiator']
    7           85             ['Support', 'Durable', 'Disabler', 'Nuker']
    8           62                                     ['Escape', 'Nuker']
    9           64              ['Support', 'Nuker', 'Pusher', 'Disabler']
    ...        ...                                                     ...
    99861       14           ['Disabler', 'Initiator', 'Durable', 'Nuker']
    99862       62                                     ['Escape', 'Nuker']
    99863      114            ['Carry', 'Escape', 'Disabler', 'Initiator']
    99864       85             ['Support', 'Durable', 'Disabler', 'Nuker']
    99865        4  ['Carry', 'Disabler', 'Jungler', 'Nuker', 'Initiator']
    99866       70             ['Carry', 'Jungler', 'Durable', 'Disabler']
    99867       36               ['Carry', 'Nuker', 'Durable', 'Disabler']
    99868       48                            ['Carry', 'Nuker', 'Pusher']
    99869      111              ['Support', 'Nuker', 'Disabler', 'Escape']
    99870      105                                   ['Nuker', 'Disabler']
    
    [99871 rows x 2 columns]
    
    • 3

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5