从一个条件连接两个数据帧

2024-09-30 22:16:20 发布

您现在位置:Python中文网/ 问答频道 /正文

df1
            A       B
0        0.00  514.51
1        0.75  514.51
2        1.10  514.42
3        3.52  514.41
4        5.59  514.43

df2
            A       B
0        2.00  520.00
1        3.00  521.00
2        4.00  524.00
3        5.00  529.00
4        6.00  531.00
5        7.00  532.00

我需要创建一个新的df3,带有以下条件:

  • 来自df1:所有数据。你知道吗
  • Fromdf2:来自lastdf1A值的数据(我的意思是,lastdf1A值是5.59;我想包含在newdf3中的第一个df2A值是6.00)

输出df3应为:

            A       B
0        0.00  514.51
1        0.75  514.51
2        1.10  514.42
3        3.52  514.41
4        5.59  514.43
5        6.00  531.00
6        7.00  532.00

我试过concatmergejoin。没有成功。你知道吗


Tags: 数据merge条件df1df2joinconcatdf3
3条回答

试试这个

pd.concat([df1,df2[df2['A']>df1['A'].max()]])

输出:

      A       B
0  0.00  514.51
1  0.75  514.51
2  1.10  514.42
3  3.52  514.41
4  5.59  514.43
4  6.00  531.00
5  7.00  532.00

使用^{}^{}创建的第二个df2作为第一个True值,并按loc过滤:

df = df1.append(df2.loc[(df2['A'] >= df1['A'].values[-1]).idxmax():])
print (df)
      A       B
0  0.00  514.51
1  0.75  514.51
2  1.10  514.42
3  3.52  514.41
4  5.59  514.43
4  6.00  531.00
5  7.00  532.00

细节

print (df2.loc[(df2['A'] >= df1['A'].values[-1]).idxmax():])
     A      B
4  6.0  531.0
5  7.0  532.0

首先计算df2上的布尔掩码:

mask = df2['A'] >= df1['A'].iloc[-1]  # or df1['A'].max(), as required

然后使用pd.concat

df3 = pd.concat([df1, df2[mask]], ignore_index=True)

相关问题 更多 >