gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:46:21 24 4
gpt4 key购买 nike

标题没有表达清楚,但这是我能描述的最好的。

我有如下所示的 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 的底部。但是,我想附加 data2 的行,其 column1 值大于或等于 554,这是 data1 的 column1 的最后一行>

这是我想要的输出:

>>> 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

因此,当附加到 data1 时,data2 的一些第一行将被跳过。

假设data1的最后一行是它的最大值,data2的行排在data1的最后一个值之后,即 554

有什么优雅的方法可以使用 Pandas 工具箱来完成这项工作吗?

最佳答案

使用concat通过 boolean indexing 过滤第二个 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

关于Python Pandas Dataframe,在跳过重叠行的同时合并 df 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49705754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com