【问题标题】:How to assign a value to a column for every row of pandas dataframe? [duplicate]如何为熊猫数据框的每一行分配一个值? [复制]
【发布时间】:2026-01-25 12:35:01
【问题描述】:

我一直在尝试为数据框的每一行分配一个值,但我无法这样做(我是 pandas 的新手),所以如果有人能提供帮助,我将非常感激!

我有两个数据框。在输入数据框中,我有品牌:

brand_raw.head()

brand_name
0   Nike
1   Lacoste
2   Adidas

然后,在输出数据集上,我有对象:

object_raw.head()

category_id object_name
0   24  T-shirt
1   45  Shorts
2   32  Dress

我需要的是一个包含所有对象和所有品牌的数据框:

to_raw.head()

category_id object_name brand_name
0   24  T-shirt     Nike
1   45  Shorts      Nike
2   32  Dress       Nike
3   24  T-shirt     Lacoste
4   45  Shorts      Lacoste
5   32  Dress       Lacoste
6   24  T-shirt     Adidas
7   45  Shorts      Adidas
8   32  Dress       Adidas

我一直在尝试用 apply 函数来完成,遍历行,但我最终覆盖了值,所以我写了最后一个品牌:

0   24  T-shirt     Nike
1   45  Shorts      Nike
2   32  Dress       Nike

这是我的代码:

def insert_value_in_every_row(input_df, output_df, column_name):
    for row in input_df.values:
        row = row[0].rstrip()

        output_df[column_name] = output_df[column_name].apply(lambda x: row) 
    return output_df


insert_value_in_every_row(brand_raw, to_raw, 'brand_name')

谁能给我一个关于如何处理这个问题的提示,好吗?提前非常感谢!

【问题讨论】:

标签: python pandas dataframe apply


【解决方案1】:

使用itertools.product() 的另一种方法是输入迭代的笛卡尔积。

import itertools
df=(pd.DataFrame(list(itertools.product(brand_name.brand_name,object_raw.object_name))
             ,columns=['brand_name','object_name']))
df['category_id']=df['object_name'].map(object_raw.set_index('object_name')['category_id'])
print(df)

  brand_name object_name  category_id
0       Nike     T-shirt           24
1       Nike      Shorts           45
2       Nike       Dress           32
3    Lacoste     T-shirt           24
4    Lacoste      Shorts           45
5    Lacoste       Dress           32
6     Adidas     T-shirt           24
7     Adidas      Shorts           45
8     Adidas       Dress           32

【讨论】:

    【解决方案2】:

    您正在寻找两个数据帧的cartesian product。在 pandas 中解决此问题的一种方法是为两个数据帧创建一个通用且唯一的 key 并执行 merge(任意,因为完全重叠):

    df.assign(key=0).merge(object_raw.assign(key=0), on='key').drop(['key'], axis=1)
    
       brand_name  category_id object_name
    0       Nike           24     T-shirt
    1       Nike           45      Shorts
    2       Nike           32       Dress
    3    Lacoste           24     T-shirt
    4    Lacoste           45      Shorts
    5    Lacoste           32       Dress
    6     Adidas           24     T-shirt
    7     Adidas           45      Shorts
    8     Adidas           32       Dress
    

    【讨论】:

      【解决方案3】:

      这被称为笛卡尔积。在 pandas 中它有点棘手,但你可以这样做:

      import pandas as pd
      
      objects = pd.DataFrame(["T-shirt","Shorts","Dress"],columns = ['object'])
      brands =  pd.DataFrame(["Nike","Lacoste","Adidas"],columns = ['brand'])
      
      objects["key"] = 1
      brands ["key"] = 1
      
      objects.merge(brands,on='key').drop('key',axis=1)
      

      【讨论】:

        最近更新 更多