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