Python 如果两行中的标签不相同,我可以合并两行的值吗
下面是我想要组合的两个数据帧。但是标签是不同的Python 如果两行中的标签不相同,我可以合并两行的值吗,python,pandas,dataframe,Python,Pandas,Dataframe,下面是我想要组合的两个数据帧。但是标签是不同的 df1 Date Campaign Sales 11/07/2020 AMZ CT BR Leather Shoes ABCDEFG1234 $10 11/07/2020 AMZ CT NB Leather Shoes ABCDEFG1234 $20 11/07/2020 AMZ OG BR Bag HGIJK567 $30 11/0
df1
Date Campaign Sales
11/07/2020 AMZ CT BR Leather Shoes ABCDEFG1234 $10
11/07/2020 AMZ CT NB Leather Shoes ABCDEFG1234 $20
11/07/2020 AMZ OG BR Bag HGIJK567 $30
11/07/2020 AMZ OG NB Bag HGIJK567 Desktop $40
df2
Date Campaign Spend
11/07/2020 GA BR Leather Shoes ABCDEFG1234 $5
11/07/2020 GA NB Leather Shoes ABCDEFG1234 $6
11/07/2020 GA BR Bag HGIJK567 $7
11/07/2020 GA NB Bag HGIJK567 Desktop $8
这是我想要的输出
df3
Date Campaign Spend Sales
11/07/2020 CT BR Leather Shoes ABCDEFG1234 $5 $10
11/07/2020 CT NB Leather Shoes ABCDEFG1234 $6 $20
11/07/2020 OG BR Bag HGIJK567 $7 $30
11/07/2020 OG NB Bag HGIJK567 Desktop $8 $40
如果我正确理解你的问题
是的,你可以。但不在其中一个数据帧中的行保留为空。
让我给你一个例子:如果你有两个数据框,分别是
First.csv
和Second.csv
,如下所示:第一个数据帧:
A, B, C
1, 2, 3
2, 3, 4
A, C
1, 3
2, 4
第二数据帧:
A, B, C
1, 2, 3
2, 3, 4
A, C
1, 3
2, 4
您可以使用:df_row_merged = pd.concat([df_a, df_b], ignore_index=True).
合并两个数据帧<代码>df_行_合并将如下所示:
A, B, C
1, 2.0, 3
2, 3.0, 4
1, , 3
2, , 4
我希望这对您有所帮助。我会创建一个额外的列来执行
合并。据我所见,合并是基于产品名称进行的,没有首字母缩略词
df1['Campaign_j'] = df1['Campaign'].map(lambda x: ' '.join(x.split()[3:]))
df2['Campaign_j'] = df2['Campaign'].map(lambda x: ' '.join(x.split()[2:]))
print(df1)
print(df2)
df3 = df1.merge(df2,how='left',on=['Campaign_j'],suffixes=('','_x')).drop_duplicates('Campaign_x')[['Campaign','Sales','Spend']]
加入后,我们将从第一个活动列(Campaign_x)中删除重复项,并最终选择所需的列。我没有添加date
列,因为它对这个问题没有影响。输出:
Campaign Sales Costs
0 AMZ CT BR Leather Shoes ABCDEFG1234 10 5
2 AMZ CT NB Leather Shoes ABCDEFG1234 20 6
4 AMZ OG BR Bag HGIJK567 30 7
5 AMZ OG NB Bag HGIJK567 Desktop 40 8
请你说清楚一点好吗?如果我不是,则输出为df1,不包含字符串的前4个字符mistaken@CeliusStingher我向dataframe添加了新列。希望它更有意义。我编辑了数据框并添加了新的列,我还希望将两列中的值包含到合并的数据框中。@ssmm。似乎您只想将一列从一个数据帧添加到另一个数据帧?在上面的示例数据帧中,是的。但在我的csv中,我有更多的专栏。你想让我再补充一点让它更清楚吗?我想根据你新的解释和编辑,@CeliusStingher的答案就是你想要的。