繁体   English   中英

如何删除具有重复列值的行并且列数并不总是固定的?

[英]How to drop rows with duplicates column values and the number of columns are not always fixed?

我有一个数据框,该数据框中的列可以是任何数字(2-50)。 例如,它是 2 列,如下所示。 我想删除 site1 和 site2 相同的行。

df = pd.DataFrame([[507814, 501972], [529389, 529389], [508110, 508161]], columns = ['site1', 'site2'])

整个数据框

我想删除具有类似列值的行,如下预期输出:

在此处输入图片说明

df[df["site1"] != df["site2"]]

这可以在这一行完成,但是由于我没有固定的列数并且这部分在循环内,我需要一种最快的方法来做到这一点

我提前感谢您的帮助。

谢谢。

如果您有更多列,则可以使用set() + len()

x = df[~df.apply(lambda x: len(set(x)), axis=1).eq(1)]
print(x)

印刷:

    site1   site2
0  507814  501972
2  508110  508161

编辑:要指定列:

x = df[~df[["site1", "site2"]].apply(lambda x: len(set(x)), axis=1).eq(1)]
print(x)

印刷:

    site1   site2   site3
0  507814  501972  508284
2  508110  508161  508098

df使用:

    site1   site2   site3
0  507814  501972  508284
1  529389  529389  508284
2  508110  508161  508098

你可以这样做:

df = df[df.nunique(axis=1) > 1]

这是另一种方式。 如果您的所有站点值都是数字,这应该有效。

df.loc[df.diff(axis=1).sum(axis=1).ne(0)]

使用您的示例,这将过滤site1 == site2的列:

# first option
df[~df.apply(lambda x: x["site1"] == x["site2"], axis=1)]

# second option
df.query("site1 != site2")

所有选项都为您提供:

    site1   site2
0   507814  501972
2   508110  508161

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM