标题没有明确的意义,但这是我能描述的最好的。
我的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工具箱有没有优雅的方法来完成这项工作?
答案 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