使用python删除dataframe中某些列中具有相同值的行

2024-04-26 04:24:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含5列的数据帧:filename、#lineŤchanged-hist、#line_changed-myers、#line_changed-min和#line_changed-pat,其中包含数千个数据。我想做的是,如果最后四列(所有行都更改了)具有相同的值,则删除行。假设我的数据帧名为“datamerge3:

filename                    #line_changed-hist #line_changed-myers #line_changed-min #line_changed-pat
---------------------------------------------------------------------------------------------------------------
.../util/HBaseFsck.java     1808                1806                1806              1806
.../hfile/HFileBlock.java   1036                1032                1032              1040
.../HConnectionManager.java  794                 772                 772               774
.../TestCompatibility.java   762                 762                 762               762
.../master/MockServer.java   605                 605                 605               605
.../TestRowEndpoint.java     598                 598                 598               598
.../TestHBaseFsck.java       576                 572                 572               572
.../TestEndLevel.java         11                   0                   0                 0

我需要删除最后四列中具有相同值的所有行(#lineŠu changed)。例如数据编号4、5和6。然后,将其保存到新的csv文件中。这是我写的代码:

^{pr2}$

但密码没用。代码里有我遗漏的东西吗?在


Tags: 数据代码utillinejavafilenameminhist
3条回答

IIUC,您可以将diff和{}与布尔索引一起使用:

df[df.iloc[:,-4:].diff(axis=1).fillna(0).any(1)]

输出:

^{pr2}$

您可以找到最后四个点中唯一值的数量,并对大于一个的数字进行过滤。在

iloc

df[df.iloc[:, -4:].nunique(1).gt(1)]

                      filename  #line_changed-hist  #line_changed-myers  #line_changed-min  #line_changed-pat
0      .../util/HBaseFsck.java                1808                 1806               1806               1806
1    .../hfile/HFileBlock.java                1036                 1032               1032               1040
2  .../HConnectionManager.java                 794                  772                772                774
6       .../TestHBaseFsck.java                 576                  572                572                572

filter

^{pr2}$

可以使用query,但需要键入列的名称:

df.query("not(line_changed-hist == line_changed-myers and line_changed-hist == line_changed-min and line_changed-hist == line_changed-pat)")

相关问题 更多 >