![](/img/trans.png)
[英]Drop rows with NaNs from pandas dataframe based on multiple conditions
[英]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.