[英]Drop rows if value in a specific column is not an integer in pandas dataframe
[英]How to drop Pandas DataFrame rows with condition to keep specific column value
我知道以前有人问过类似的问题,但它们似乎对我的问题没有帮助,所以我决定提出一个新问题。
我拥有的是三个独立的 DataFrames - 我们称它们为a
、 b
和c
- 它们合并为一个大型数据帧。 在这三个 DataFrame 中的每一个中,可能都有重复的列值对要删除,但条件是如果该对属于 DataFrame c
,那么我想保留那对。 例如:
>>> a.head()
unit value target
0 3 23 'a'
1 2 24 'd'
2 8 56 'e'
3 9 89 'p'
4 0 32 'q'
>>> b.head()
unit value target
0 3 34 'a'
1 2 36 'd'
2 8 23 'a'
3 9 89 'p'
4 0 48 'm'
>>> c.head()
unit value target
0 3 34 'a'
1 5 23 'a'
2 2 48 'm'
3 9 56 'e'
4 0 98 'z'
我要在其中查找重复项的特定列是 ( value
, target
)。 如您所知,共有四种不同的重复场景:( a
, b
), ( b
, c
), ( a
, c
), ( a
, b
, c
)。 在上面的例子中,每个场景会出现的 ( value
, target
) 对是: ( 89
, 'p'
), ( 34
, 'a'
), ( 56
, 'e'
), and ( 23
, 'a'
),分别。
如果重复出现在 ( a
, b
) 中,这不是一个大问题,因为我可以简单地从其中一个中进行选择,但是如果它出现在其他三个场景中的任何一个中,我想从c
选择一对并丢弃重复项来自a
和/或b
。
我最初的想法是使用以下代码:
>>> df = pd.concat([a, b, c], axis=0)
>>> df.drop_duplicates(subset=['value', 'target'], keep='last', inplace=True)
由于我们将c
添加到连接的 DataFrame df
的末尾,因此如果它作为重复出现,我们保证保留该值。 但是,我想知道是否有人知道如果 ( a
, b
) 发生的方式,我们会随机选择一个,如果包含c
则我们总是选择c
。
提前致谢。
我们可以在与c
结合之前使用sample
a_b=pd.concat([a,b]).sample(n=len(a)+len(b))
new=pd.concat([a_b,c]).drop_duplicates(['value', 'target'], keep='last')
new
Out[11]:
unit value target
1 2 24 'd'
4 0 32 'q'
3 9 89 'p'
1 2 36 'd'
0 3 34 'a'
1 5 23 'a'
2 2 48 'm'
3 9 56 'e'
4 0 98 'z'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.