【问题标题】:assign values to columns pandas dataframe [duplicate]为列熊猫数据框赋值[重复]
【发布时间】:2021-10-28 03:29:02
【问题描述】:

我有一个临时数据帧 temp(如下所示)从一个较大的数据帧中切分出来。

如果帮助我将每一行的 item_price 值分配给与 model 关联的相关列,我将不胜感激,如下所示:

注意:原始和更大的数据框包含品牌、价格和型号,其中一些行具有相似的品牌名称,但型号和价格不同,所以我将这些相似的记录分成 temp 数据框并尝试将价格分配给与每条记录的 model 关联的相关列。

提前致谢!

【问题讨论】:

    标签: python pandas dataframe slice


    【解决方案1】:

    如果我是你,我会删除“轿车”、“运动”和“SUV”列并使用pivot
    在您的情况下,您需要执行以下操作:
    像这样创建一个名为 df1 的新数据框:

    df1 = df.pivot(index='brand', columns='model', values='item_price')
    

    然后将原始 DataFrame df1 与 df1 连接起来。

    df = df.join(df1, on='brand')
    

    这将为您提供您正在寻找的结果。

    【讨论】:

    • 生成的数据框会根据 model 重新整形,但它包含 NaN 值。例如,索引 317 具有 SUV 和 Sport 的 NaN 值。
    • 我已经编辑了答案,您可以将 index 设置为“品牌”,现在您的结果数据框将如您所愿
    • 使用reset_index()后,只返回返回的dataframe有一条记录。列是:['brand', 'SUV', 'Sedan', 'Sport'],值是 ['BMW', 90.0, 78.0, 83.0]。
    • 保留其他行和列以供进一步处理非常重要。
    • 再次编辑,现在和你的例子一模一样。
    【解决方案2】:

    您可以创建一个基于这样的条件返回值的方法:

    我使用df作为数据框的名称,你可以重命名为temp

    def set_item_price(model):
      if model == "Sedan":
        return 78.00
    
      return 0
    
    df["item_price"] = [
      set_item_price(a) for a in df['model']
    ]
    

    【讨论】:

      猜你喜欢
      • 2019-09-30
      • 2019-12-28
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 2019-01-03
      相关资源
      最近更新 更多