为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2021-12-21 17:03:49
我一直在尝试为数据框的每一行分配一个值,但我一直无法这样做(我是熊猫的新手),所以如果有人能提供帮助,我将不胜感激!我有两个数据框。在输入数据框中,我有品牌:brand_raw.head()brand_name0   Nike1   Lacoste2   Adidas然后,在输出数据集上,我有对象:object_raw.head()category_id object_name0   24  T-shirt1   45  Shorts2   32  Dress我需要的是一个包含所有对象和所有品牌的数据框:to_raw.head()category_id object_name brand_name0   24  T-shirt     Nike1   45  Shorts      Nike2   32  Dress       Nike3   24  T-shirt     Lacoste4   45  Shorts      Lacoste5   32  Dress       Lacoste6   24  T-shirt     Adidas7   45  Shorts      Adidas8   32  Dress       Adidas我一直在尝试使用 apply 函数来完成它,遍历行,但我最终覆盖了值,所以我写了最后一个品牌:0   24  T-shirt     Nike1   45  Shorts      Nike2   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_dfinsert_value_in_every_row(brand_raw, to_raw, 'brand_name')有人可以给我一个关于如何处理这个问题的提示吗?非常感谢!
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

您正在寻找两个数据帧的笛卡尔积。在 Pandas 中解决此问题的一种方法是为两个数据帧创建一个通用且唯一的键并执行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


查看完整回答
反对 回复 2021-12-21
?
温温酱

TA贡献1752条经验 获得超4个赞

另一种使用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


查看完整回答
反对 回复 2021-12-21
?
茅侃侃

TA贡献1842条经验 获得超21个赞

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


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)


查看完整回答
反对 回复 2021-12-21
  • 3 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信