【问题标题】:Replace specific value based on condition in a loop pandas dataframe根据循环熊猫数据框中的条件替换特定值
【发布时间】:2019-01-24 02:13:07
【问题描述】:

已编辑:

如果其他单元格上的值满足条件,我想替换单元格中的值

目前,我有这个

   for a in ACPurchased:
        aPos = self.model.grid.get_cell_list_contents(a.pos)
        CustAC = [a for a in aPos if a.breed =='AC']

        for b in CustAC:
            AC_Data = [b.AC,b.Appliance,b.COP]

            self.AC_DataPOS[self.AC_DataPOS['Category'].isin(AC_Data) &
                            self.AC_DataPOS['Appliance'].isin(AC_Data) &
                            self.AC_DataPOS['COP'].isin(AC_Data),
                            'Status'] = 'occupied'

并返回此错误:

File"/Users/widhadyah/Dropbox/MyPythonProject/ePSSMaterialModel/src/MaterialModel.py", line 275, in UpdateUsedMachineStatus
        'Status'] = 'occupied'
      File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/frame.py", line 2419, in __setitem__
        self._set_item(key, value)
      File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/frame.py", line 2485, in _set_item
        value = self._sanitize_column(key, value)
      File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/frame.py", line 2684, in _sanitize_column
        if broadcast and key in self.columns and value.ndim == 1:
      File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/indexes/base.py", line 1393, in __contains__
        hash(key)
      File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/generic.py", line 831, in __hash__
        ' hashed'.format(self.__class__.__name__))
    TypeError: 'Series' objects are mutable, thus they cannot be hashed

我尝试使用 .iterrows() 并仍然遇到相同的错误。 对这个问题有什么建议吗?

提前谢谢你

【问题讨论】:

  • 能否请edit 并添加完整的异常详细信息?您的代码在语法上不正确,在某处缺少 ] - 您需要修复它。
  • 我认为需要loc 并添加() like self.AC_DataPOS.loc[(self.AC_DataPOS['COP']== b.COP) & (self.AC_DataPOS['Appl'] == b.App), 'Status'] = 'occupied'
  • @jezrael 有效!!谢谢

标签: python-3.x pandas loops dataframe


【解决方案1】:

我认为需要DataFrame.loc,因为通过布尔掩码进行链式过滤并选择列Status

self.AC_DataPOS.loc[self.AC_DataPOS['Category'].isin(AC_Data) &
                            self.AC_DataPOS['Appliance'].isin(AC_Data) &
                            self.AC_DataPOS['COP'].isin(AC_Data),
                            'Status'] = 'occupied' 

【讨论】:

    猜你喜欢
    • 2019-07-31
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多