在熊猫的数据框中,使用Python3
如何删除包含特定值的行三遍或三遍以上。
例如
输入:
Date A B C D E F G H
2018-11-16 82873 -420 -18974 0 233064 105 4671
2018-11-17 -67566 0 17348 -7281 0 -358 0
2018-11-18 117400 -6030 0 -7734 761842 0 935
2018-11-21 -101588 0 192 0 135460 7251 0
2018-11-22 0 63148 0 2032 0 3902 1347
预期输出:
Date A B C D E F G H
2018-11-16 82873 -420 -18974 0 233064 105 4671
2018-11-18 117400 -6030 0 -7734 761842 0 935
答案 0 :(得分:0)
将pandas.DataFrame.eq
与sum
和ge
一起使用:
df[~df.eq(0).sum(1).ge(3)]
输出:
Date A B C D E F G H
0 2018-11-16 82873 -420 -18974 0 233064 105 4671 NaN
2 2018-11-18 117400 -6030 0 -7734 761842 0 935 NaN
答案 1 :(得分:0)
您可以尝试以下操作:
import pandas as pd
data = """2018-11-16 82873 -420 -18974 0 233064 105 4671
2018-11-17 -67566 0 17348 -7281 0 -358 0
2018-11-18 117400 -6030 0 -7734 761842 0 935
2018-11-21 -101588 0 192 0 135460 7251 0
2018-11-22 0 63148 0 2032 0 3902 1347""".split('\n')
data = [r.split() for r in data]
df = pd.DataFrame.from_records(data)
from collections import defaultdict
def find(x):
cnt = defaultdict(int)
for i in x:
cnt[i] += 1
for v in cnt.values():
if v >= 3:
return False
return True
cols = df.apply(find,axis=1)
df[cols]
输出(您可以自己添加列,我只是在做一个简单的示例)
0 1 2 3 4 5 6 7
0 2018-11-16 82873 -420 -18974 0 233064 105 4671
2 2018-11-18 117400 -6030 0 -7734 761842 0 935