从条件行加入两个数据帧

时间:2018-05-30 10:34:40

标签: python pandas

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:所有数据。
  • 来自df2:来自上一个df1 A值的数据(我的意思是,上次df1 A值为5.59;首先df2 { {1}}我希望在新A中包含的值为6.00)

输出df3应为:

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 concatmerge。没有成功。

3 个答案:

答案 0 :(得分:2)

首先在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)

答案 1 :(得分:2)

使用appendidxmax创建的第二个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

答案 2 :(得分:0)

试试这个,

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
相关问题