如何为熊猫数据框的每一行的列分配一个值?

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


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


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')

有人可以给我一个关于如何处理这个问题的提示吗?非常感谢!


HUH函数
浏览 228回答 3
3回答

慕少森

您正在寻找两个数据帧的笛卡尔积。在 Pandas 中解决此问题的一种方法是为两个数据帧创建一个通用且唯一的键并执行merge(任何,因为存在完全重叠):df.assign(key=0).merge(object_raw.assign(key=0), on='key').drop(['key'], axis=1)   brand_name  category_id object_name0       Nike           24     T-shirt1       Nike           45      Shorts2       Nike           32       Dress3    Lacoste           24     T-shirt4    Lacoste           45      Shorts5    Lacoste           32       Dress6     Adidas           24     T-shirt7     Adidas           45      Shorts8     Adidas           32       Dress

温温酱

另一种使用itertools.product()它的方法给出输入迭代的笛卡尔积。import itertoolsdf=(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_id0       Nike     T-shirt           241       Nike      Shorts           452       Nike       Dress           323    Lacoste     T-shirt           244    Lacoste      Shorts           455    Lacoste       Dress           326     Adidas     T-shirt           247     Adidas      Shorts           458     Adidas       Dress           32

茅侃侃

这被称为笛卡尔积。在熊猫中它有点棘手,但你可以这样做:import pandas as pdobjects = pd.DataFrame(["T-shirt","Shorts","Dress"],columns = ['object'])brands =  pd.DataFrame(["Nike","Lacoste","Adidas"],columns = ['brand'])objects["key"] = 1brands ["key"] = 1objects.merge(brands,on='key').drop('key',axis=1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python