Python 为另一个数据帧中的每个唯一值复制整个数据帧

Python 为另一个数据帧中的每个唯一值复制整个数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,一个包含感兴趣的主数据,另一个包含我希望附加到前者的列的查找。例如: df1 Name Date_1 Date_2 0 John 2019-11-13 2019-12-28 1 Amy 2019-11-13 2019-12-28 2 Sarah 2019-11-14 2019-12-29 3 Dennis 2019-11-14 2019-12-29 4 Austin 2019-11-15 2019-12

我有两个数据帧,一个包含感兴趣的主数据,另一个包含我希望附加到前者的列的查找。例如:

df1

    Name   Date_1       Date_2
0   John   2019-11-13   2019-12-28
1   Amy    2019-11-13   2019-12-28
2   Sarah  2019-11-14   2019-12-29
3   Dennis 2019-11-14   2019-12-29
4   Austin 2019-11-15   2019-12-30
5   Jenn   2019-11-08   2019-12-23
对于df2中的每一行,我想将Var_1和Var_2追加到df1中,并用该行中的值填充所有行。这将对df2中的每个唯一行重复,从而产生一个串联的数据帧,如下所示:

df_final

    Name   Date_1       Date_2      Var_1  Var_2
0   John   2019-11-13   2019-12-28  1x2    test_1
1   Amy    2019-11-13   2019-12-28  1x2    test_1
2   Sarah  2019-11-14   2019-12-29  1x2    test_1
3   Dennis 2019-11-14   2019-12-29  1x2    test_1
4   Austin 2019-11-15   2019-12-30  1x2    test_1
5   Jenn   2019-11-08   2019-12-23  1x2    test_1
6   John   2019-11-13   2019-12-28  3x4    test_2
7   Amy    2019-11-13   2019-12-28  3x4    test_2
8   Sarah  2019-11-14   2019-12-29  3x4    test_2
9   Dennis 2019-11-14   2019-12-29  3x4    test_2
10  Austin 2019-11-15   2019-12-30  3x4    test_2
11  Jenn   2019-11-08   2019-12-23  3x4    test_2
12  John   2019-11-13   2019-12-28  5x6    test_3
13  Amy    2019-11-13   2019-12-28  5x6    test_3
14  Sarah  2019-11-14   2019-12-29  5x6    test_3
15  Dennis 2019-11-14   2019-12-29  5x6    test_3
16  Austin 2019-11-15   2019-12-30  5x6    test_3
17  Jenn   2019-11-08   2019-12-23  5x6    test_3
我的初始解决方案是迭代df2中的每一行,将该行的值添加到df1的Var_1和Var_2列。然后,我将连接生成的数据帧以创建df_final


虽然这个解决方案有效,但数据帧最终会变得更大,因此我觉得确实存在一个更有效的解决方案。

我会稍微更改您的解决方案

我将迭代df2较小数据帧的行,而不是迭代df1较大数据帧的行。 而不是考虑df2的行,我将压缩df2中的各个列,并迭代列中的值。 尝试这两种方法并对差异进行计时可能会很有趣

作为pd进口熊猫 步骤1:创建数据帧1 df_1=pd.DataFrame{ “姓名”:[“约翰”、“艾米”、“莎拉”], ‘日期1’:[‘2019-11-13’、‘2019-11-13’、‘2019-11-13’, ‘日期2’:[‘2019-12-28’、‘2019-12-28’、‘2019-12-28’、] } 打印“df_1:” printdf_1 打印 步骤2:创建数据帧2 df_2=pd.DataFrame{ ‘变量1’:[‘1x2’、‘3x4’、‘5x6’], ‘变量2’:[‘测试1’、‘测试2’、‘测试3’] } 打印“df_2:” printdf_2 打印 步骤3:创建空的主数据框以存储结果 df_new=pd.DataFrame 循环通过df_2中的列 对于Zipf_2['Var_1'],df_2['Var_2']中的每个_var1,每个_var2: 创建df_1的副本 temp_df=df_1.复制 使用Var_1和Var_2向数据框添加2个新列 temp_df['Var_1']=每个变量1 温度df['Var_2']=每个变量2 将临时数据帧连接到主数据帧 df_new=局部混凝土[df_new,temp_df] 打印“新主数据帧:” printdf_新 打印
有趣的这确实有效,但是我发现这里使用merge的解决方案要简洁得多。事实证明,我试图实现的是笛卡尔积,在我问这个问题之前,知道它会很有帮助!
df_final

    Name   Date_1       Date_2      Var_1  Var_2
0   John   2019-11-13   2019-12-28  1x2    test_1
1   Amy    2019-11-13   2019-12-28  1x2    test_1
2   Sarah  2019-11-14   2019-12-29  1x2    test_1
3   Dennis 2019-11-14   2019-12-29  1x2    test_1
4   Austin 2019-11-15   2019-12-30  1x2    test_1
5   Jenn   2019-11-08   2019-12-23  1x2    test_1
6   John   2019-11-13   2019-12-28  3x4    test_2
7   Amy    2019-11-13   2019-12-28  3x4    test_2
8   Sarah  2019-11-14   2019-12-29  3x4    test_2
9   Dennis 2019-11-14   2019-12-29  3x4    test_2
10  Austin 2019-11-15   2019-12-30  3x4    test_2
11  Jenn   2019-11-08   2019-12-23  3x4    test_2
12  John   2019-11-13   2019-12-28  5x6    test_3
13  Amy    2019-11-13   2019-12-28  5x6    test_3
14  Sarah  2019-11-14   2019-12-29  5x6    test_3
15  Dennis 2019-11-14   2019-12-29  5x6    test_3
16  Austin 2019-11-15   2019-12-30  5x6    test_3
17  Jenn   2019-11-08   2019-12-23  5x6    test_3