繁体   English   中英

在 Pandas 数据框中在多个条件下(基于 2 列)删除行

[英]Drop rows on multiple conditions (based on 2 column) in pandas dataframe

我有一个包含 200 万条记录的 Pandas 数据框。 (DA1 和 DA2 等 2 列)如果我根据 DA1 值对数据框进行排序,则如下所示。 我的真实数据框有 200 万条记录。

df
    DA1   DA2
0   1.0   1.0
1   1.0   11256.0
2   1.0   131248.0
3   2.0   2.0
4   2.0   11585.0
5   2.0   25894.0
6   3.0   3.0

如果我根据 DA2 值对数据框进行排序,则如下所示。

df.head(6)
        DA1         DA2
0       1.0         1.0
87472   11256.0     1.0
267142  131248.0    1.0
3       2.0         2.0
568875  11585.5     2.0
598253  25894.0     2.0
652875  365845.0    2.0

如果任何行正在翻转并将其放在另一行中,我想删除该行。 我的意思是如果 DA1 2.0 和 DA2 365845.0 以及另一行 DA1 365845.0 和 DA2 2.0 我想放弃其中一个。

我基本上想删除索引 87472、267142、568875 和 598253 中的那些重复值。下面的行基本上想要删除。

        DA1         DA2
87472   11256.0     1.0
267142  131248.0    1.0
568875  11585.5     2.0
598253  25894.0     2.0

我可以在 for 循环或 lambda 函数中做到这一点吗? **他们中的大多数与上述数据框混淆。 这是我真正想做的一个简单的例子。 如果任何行翻转并具有相同的值,我想删除它。 DA1 1 和 DA2 2 另一行 DA1 2 和 DA2 1 我想放弃它。 **。

df = pd.DataFrame({"Column1":[1, 1,1, 3,2],
                    "Column2":[1,2,3,1,1]})

df
    Column1     Column2
0       1           1
1       1           2
2       1           3
3       3           1
4       2           1

# I basically need to delete 3, 4 indexes since those values already in 1,2 indexes
I need this data frame
df
    Column1     Column2
0       1           1
1       1           2
2       1           3

提前致谢。

排序后

df = df.drop_duplicates('DA2')

考虑到两列的组合,需要一些工程来查找重复的行。 您可以创建一个Series对象来显示重复的行:

key=df.apply(lambda x: '{}-{}'.format(min(x), max(x)), axis=1)

这基本上将为每一行创建一个键,每列中的有序值用破折号分隔。 然后您可以使用此键删除重复的行:

df[~key.duplicated()]

例子:

>>> df = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'b': [2, 1, 4, 3, 5]})
>>> df

Output: 

   a  b
0  1  2
1  2  1
2  3  4
3  4  3
4  5  5

>>> key=df.apply(lambda x: '{}-{}'.format(min(x), max(x)), axis=1)
>>> key

Output:

0    1-2
1    1-2
2    3-4
3    3-4
4    5-5
dtype: object

>>> df[~key.duplicated()]

Output:

   a  b
0  1  2
2  3  4
4  5  5

暂无
暂无

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

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