如何删除熊猫数据框中具有多个条件的行

时间:2019-09-09 10:00:18

标签: python pandas conditional-statements row

 import pandas as pd
 import numpy as np
 print df

我是新手,我使用熊猫来处理excel文件。我有一个像波纹管这样的数据框

DAT_KEY      IP         DATA
01-04-19    10.0.0.1    3298329
01-04-19    10.0.0.1    0
02-04-19    10.0.0.1    3298339
02-04-19    10.0.0.1    0
01-04-19    10.0.0.2    3233233
01-04-19    10.0.0.2    0
01-04-19    10.0.0.3    0

我只想删除具有相同IP且DAT_KEYDATA=0的行。不想删除具有DATA=0的行,但是DAT_KEY和IP唯一。

我的预期结果:

DAT_KEY      IP         DATA
01-04-19    10.0.0.1    3298329
02-04-19    10.0.0.1    3298339
01-04-19    10.0.0.2    3233233
01-04-19    10.0.0.3    0

我尝试放置重复副本,但不适合我的情况

df = df.drop_duplicates()

2 个答案:

答案 0 :(得分:0)

使用

  • groupby-函数用于根据某些条件将数据分为几组。
  • .first()-首先计算组值。

例如。

df = df.groupby(['DAT_KEY','IP'],as_index=False,sort=False).first()
print(df)

O / P:

    DAT_KEY        IP     DATA
0  01-04-19  10.0.0.1  3298329
1  02-04-19  10.0.0.1  3298339
2  01-04-19  10.0.0.2  3233233
3  01-04-19  10.0.0.3        0

答案 1 :(得分:0)

也许这就是您需要的:

    DAT_KEY        IP     DATA
0  01-04-19  10.0.0.1  3298329
1  01-04-19  10.0.0.1        0
2  02-04-19  10.0.0.1  3298339
3  02-04-19  10.0.0.1        0
4  01-04-19  10.0.0.2  3233233
5  01-04-19  10.0.0.2        0
6  01-04-19  10.0.0.3        0
7  01-04-19  10.0.0.1    99999

df.groupby(["DAT_KEY","IP"], as_index=False,sort=False).apply(lambda g: g if len(g)==1 else g[g["DATA"]!=0] ).reset_index(drop=True)                                                                                                      
Out[94]: 
    DAT_KEY        IP     DATA
0  01-04-19  10.0.0.1  3298329
1  01-04-19  10.0.0.1    99999
2  02-04-19  10.0.0.1  3298339
3  01-04-19  10.0.0.2  3233233
4  01-04-19  10.0.0.3        0