Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果两行中的标签不相同,我可以合并两行的值吗_Python_Pandas_Dataframe - Fatal编程技术网

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的答案就是你想要的。