Python Pandas Dataframe,在跳过重叠行时合并df行

时间:2018-04-07 09:13:18

标签: python pandas merge

标题没有明确的意义,但这是我能描述的最好的。

我的DataFrame看起来像这样:

data1 = np.matrix([[4,75,2,5,84,2,6,5,554],[4,6,67,6,4,5,8,5,8]]).T
data2 = np.matrix([[3,46,4,555,556,557,558,559,560],[1,2,4,1,3,5,3,1,5]]).T

data1 = pd.DataFrame(data1)
data2 = pd.DataFrame(data2)

>>> data1
     0   1
0    4   4
1   75   6
2    2  67
3    5   6
4   84   4
5    2   5
6    6   8
7    5   5
8  554   8


>>> data2
     0  1
0    3  1
1   46  2
2    4  4
3  555  1
4  556  3
5  557  5
6  558  3
7  559  1
8  560  5

我想将data2追加到data1的底部。但是,我想追加{1}}的行,其列1的值大于或等于data2,这是554的第1行的最后一行

这是我想要的输出:

data1

因此,在追加到>>> merged_df 0 1 0 4 4 1 75 6 2 2 67 3 5 6 4 84 4 5 2 5 6 6 8 7 5 5 8 554 8 9 555 1 10 556 3 11 557 5 12 558 3 13 559 1 14 560 5 时,系统会跳过data2的第一行。

假设data1的最后一行是其最大值,data1的行在data2的最后一个值之后排序,即data1 < / p>

使用Pandas工具箱有没有优雅的方法来完成这项工作?

1 个答案:

答案 0 :(得分:3)

concat使用boolean indexing和{{3}}后的过滤器DataFrame

print (data1.iloc[-1, 0])
554

df = pd.concat([data1, data2[data2[0] > data1.iloc[-1, 0]]], ignore_index=True)
print (df)
      0   1
0     4   4
1    75   6
2     2  67
3     5   6
4    84   4
5     2   5
6     6   8
7     5   5
8   554   8
9   555   1
10  556   3
11  557   5
12  558   3
13  559   1
14  560   5

对于通过max值进行比较的一般解决方案:

df = pd.concat([data1, data2[data2[0] > data1[0].max()]], ignore_index=True)

解决方案,如果自定义列名称:

data1 = pd.DataFrame(data1, columns=list('ab'))
data2 = pd.DataFrame(data2, columns=list('ab'))

print (data1.iloc[-1, data1.columns.get_loc('a')])
554

data22 = data2[data2['a'] > data1.iloc[-1, data1.columns.get_loc('a')]]
df = pd.concat([data1, data22], ignore_index=True)
print (df)
      a   b
0     4   4
1    75   6
2     2  67
3     5   6
4    84   4
5     2   5
6     6   8
7     5   5
8   554   8
9   555   1
10  556   3
11  557   5
12  558   3
13  559   1
14  560   5