首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果满足条件,则提取上、下行。

如果满足条件,则提取上、下行。
EN

Stack Overflow用户
提问于 2020-12-16 08:57:13
回答 1查看 42关注 0票数 0

致以问候。我有以下坐标数据,除以块。每个街区从seq0_leftend、seq0_rightend、seq1_leftend、seq1_rightend、seq2_leftend、seq2_rightend、seq3_leftend、seq3_rightend等等开始。我希望,对于给定条件的每个块,如果坐标为负值,则提取上下行。数据文件示例:

代码语言:javascript
运行
复制
seq0_leftend  seq0_rightend
0              7         107088
1         107089         108940
2         108941         362759
3         362760         500485
4         500486         509260
5         509261         702736
seq1_leftend  seq1_rightend
0              1         106766
1         106767         108619
2         108620         355933
3         355934         488418
4         488419         497151
5         497152         690112
6         690113         700692
7         700693         721993
8         721994         722347
9         722348         946296
10        946297         977714
11        977715         985708
12       -985709        -990725
13        991992        1042023
14       1042024        1259523
15       1259524        1261239
seq2_leftend  seq2_rightend
0              1         109407
1         362514         364315
2         109408         362513
3         364450         504968
4        -504969        -515995
5         515996         671291
6        -671295        -682263
7         682264         707010
8        -707011        -709780
9         709781         934501
10        973791        1015417
11       -961703        -973790
12        948955         961702
13       1015418        1069976
14       1069977        1300633
15      -1300634       -1301616
16       1301617        1344821
17      -1515463       -1596433
18       1514459        1515462
19      -1508094       -1514458
20       1346999        1361467
21      -1361468       -1367472
22       1369840        1508093
seq3_leftend  seq3_rightend
0              1         112030
1         112031         113882
2         113883         381662
3         381663         519575
4         519576         528317
5         528318         724500
6         724501         735077
7         735078         759456
8         759457         763157
9         763158         996929
10        996931        1034492
11       1034493        1040984
12      -1040985       -1061402
13       1071212        1125426
14       1125427        1353901
15       1353902        1356209
16       1356210        1392818
seq4_leftend  seq4_rightend
0              1         105722
1         105723         107575
2         107576         355193
3         355194         487487
4         487488         496220
5         496221         689560
6         689561         700139
7         700140         721438
8         721458         721497
9         721498         947183
10        947184         978601
11        978602         986595
12       -986596        -991612
13        994605        1046245
14       1046247        1264692
15       1264693        1266814

最后,用感兴趣的数据编写一个新的csv,我想要的最后结果的一个例子是:

代码语言:javascript
运行
复制
seq1_leftend  seq1_rightend
11        977715         985708
12       -985709        -990725
13        991992        1042023
seq2_leftend  seq2_rightend
3         364450         504968
4        -504969        -515995
5         515996         671291
6        -671295        -682263
7         682264         707010
8        -707011        -709780
9         709781         934501
10        973791        1015417
11       -961703        -973790
12        948955         961702
14       1069977        1300633
15      -1300634       -1301616
16       1301617        1344821
17      -1515463       -1596433
18       1514459        1515462
19      -1508094       -1514458
20       1346999        1361467
21      -1361468       -1367472
22       1369840        1508093
seq3_leftend  seq3_rightend
11       1034493        1040984
12      -1040985       -1061402
13       1071212        1125426
seq4_leftend  seq4_rightend
11        978602         986595
12       -986596        -991612
13        994605        1046245
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-16 10:05:51

我假设您有一个list of DataFrames,让我们称之为src。

若要转换单个 DataFrame,请定义以下函数:

代码语言:javascript
运行
复制
def findRows(df):
    col = df.iloc[:, 0]
    if col.lt(0).any():
        return df[col.lt(0) | col.shift(1).lt(0) | col.shift(-1).lt(0)]
    else:
        return None

请注意,此函数以从源DataFrame读取列开始,因此它独立于该列的名称。

然后检查该列中的任何元素是否< 0。

如果找到,返回的对象是包含值<0的行的DataFrame

  • 在此元素中、
  • 中或在前一个元素中、
  • 中或在下一个元素中。

如果未找到,则此函数将不返回任何(从您的预期结果--我看到在这种情况下,您甚至不想要任何空的DataFrame)。

第一步是从src收集在每个DataFrame上调用的函数的结果。

代码语言:javascript
运行
复制
result = [ findRows(df) for df in src ]

最后一部分是过滤掉没有的元素。

代码语言:javascript
运行
复制
result = list(filter(None.__ne__, result))

要查看结果,请运行:

代码语言:javascript
运行
复制
for df in result:
    print(df)

对于包含前3位DataFrames的src,我得到:

代码语言:javascript
运行
复制
    seq1_leftend  seq1_rightend
11        977715         985708
12       -985709        -990725
13        991992        1042023
    seq2_leftend  seq2_rightend
3         364450         504968
4        -504969        -515995
5         515996         671291
6        -671295        -682263
7         682264         707010
8        -707011        -709780
9         709781         934501
10        973791        1015417
11       -961703        -973790
12        948955         961702
14       1069977        1300633
15      -1300634       -1301616
16       1301617        1344821
17      -1515463       -1596433
18       1514459        1515462
19      -1508094       -1514458
20       1346999        1361467
21      -1361468       -1367472
22       1369840        1508093

如您所见,结果列表只包含来自第二个和第三个源DataFrame的结果。第一个被过滤掉了,因为findRows在处理过程中没有返回任何信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65320115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档