This question already has answers here:
Performant cartesian product (CROSS JOIN) with pandas
(3个答案)
2年前关闭。
我一直在尝试为数据框的每一行分配一个值,但我一直没有这样做(我是 Pandas 新手),所以如果有人可以帮忙,我将非常感激!
我有两个数据框。在输入数据框中,我有以下品牌:
然后,在输出数据集上,我有一些对象:
我需要的是一个包含所有对象和所有品牌的数据框:
我一直在尝试使用apply函数,对行进行迭代,但是最终覆盖了值,所以我写了最后一个品牌:
这是我的代码:
有人可以给我提示如何处理吗?在此先多谢!
(3个答案)
2年前关闭。
我一直在尝试为数据框的每一行分配一个值,但我一直没有这样做(我是 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')
有人可以给我提示如何处理吗?在此先多谢!
最佳答案
您正在寻找两个数据框的cartesian product。在 Pandas 中解决此问题的一种方法是为两个数据帧创建一个公共(public)且唯一的 key ,并执行 merge
(任何 key ,因为存在完全重叠):
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
关于python - 如何为 Pandas 数据框的每一行分配值? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55416610/