【问题标题】:Basic Pandas: How do I copy specific parts of a variable in a dataframe based on another variable? [duplicate]Basic Pandas:如何根据另一个变量复制数据框中变量的特定部分? [复制]
【发布时间】:2021-12-29 21:34:40
【问题描述】:

好的,所以我的数据是 1088 辆汽车,分为 14 个类别(“Hovedkategorinavn”)。每辆车都有一个值来描述它的使用量(“anvendelsesgrad”)。我希望复制“anvendelsesgrad”变量,同时更改某些车辆类别的“anvendelsesgrad”值,但保留其他类别的值。我该怎么做?

我尝试过类似这样的奇怪解决方法(“inner_merge”是我的数据框,函数“anvendelsesgrad”是计算变量“anvendelsesgrad”的函数):

def anvend_ny6(var):

    if var == 'Entreprenørudstyr':
        return 1
    if var == 'Fejemaskiner, små':
        return 1
    if var == 'Fejemaskiner, store':
        return 1
    if var == 'Varevogne, komprimator':
        return 1
    if var == 'Transportvogne, små':
        return 1
    if var == 'Græsklipper':
        return 1
    if var == 'Personbiler':
        return 0.5
    if var == 'Gaffeltrucks':
        return 1
    else:
        return anvendelsesgrad(inner_merge.timer_tænding, inner_merge.tænding_agg, inner_merge.Count, inner_merge.dage_kørt_agg)

var3 = inner_merge.Hovedkategorinavn

inner_merge['nyanvend6'] = anvend_ny6(var3)
inner_merge.nyanvend6

但是,这会产生以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-241-bf7bd5cedfcf> in <module>
     20 var3 = inner_merge.Hovedkategorinavn
     21 
---> 22 inner_merge['nyanvend6'] = anvend_ny6(var3)
     23 inner_merge.nyanvend6

<ipython-input-241-bf7bd5cedfcf> in anvend_ny6(var)
      1 def anvend_ny6(var):
----> 2     if var == 'Entreprenørudstyr':
      3         return 1
      4     if var == 'Fejemaskiner, små':
      5         return 1

~\anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
   1440     @final
   1441     def __nonzero__(self):
-> 1442         raise ValueError(
   1443             f"The truth value of a {type(self).__name__} is ambiguous. "
   1444             "Use a.empty, a.bool(), a.item(), a.any() or a.all()."

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我相信有比解决这个问题更简单的解决方案,但我只是没有知识或不够聪明,无法弄清楚如何解决。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您正在尝试将var3(一个系列)与一个字符串进行比较。

    如果你想“逐行”调用函数,

    inner_merge['nyanvend6'] = inner_merge.Hovedkategorinavn.apply(anvend_ny6)
    

    Pandas 会为系列中的每个项目调用anvend_ny6

    (但是,调用anvendelsesgradelse 子句仍然可能会给您带来一些麻烦。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 2018-09-11
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多