对于这样的DataFrame,我需要删除一些行:
import pandas as pd
import numpy as np
input_ = pd.DataFrame()
input_ ['ID'] = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
input_ ['ST'] = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
input_ ['V'] = [NaN, NaN, 1, 1, NaN, 1, Nan, 1, NaN, NaN, NaN, NaN]\
最后是一个像这样的DataFrame:
output_ ['ID'] = [ 2, 3, 4, 2, 3, 4, 2, 3, 4]
output_ ['ST'] = [ 1, 1, 1, 2, 2, 2, 3, 3, 3]
output_ ['V'] = [NaN, 1, 1, 1, Nan, 1, NaN, NaN, NaN]
其中,我删除了ID == 1的行,因为这几行在ST列中为所有值设置了V列== float(NaN) np.isnan(V)。如何选择使用这两个条件在Pandas DataFrame中擦除哪些行?
发布于 2021-03-06 02:55:29
使用groupby().transform('any')检查组是否包含某些notna
valids = input_.V.notna().groupby(input_.ID).transform('any')
output = input_[valids]输出:
ID ST V
1 2 1 NaN
2 3 1 1.0
3 4 1 1.0
5 2 2 1.0
6 3 2 NaN
7 4 2 1.0
9 2 3 NaN
10 3 3 NaN
11 4 3 NaN发布于 2021-03-06 03:00:00
试试这个:
input_ = input_[(input_['ID']!=1) & input_['V'].notnull()]我不确定我是否完全理解您的问题,以及您是否希望过滤1,或者您这样做只是为了去掉NaN值。如果您不想通过ID==1进行实际筛选,只需:
input_ = input_[input_['V'].notnull()]这两方面的产出:
ID ST V
2 3 1 1.0
3 4 1 1.0
5 2 2 1.0
7 4 2 1.0发布于 2021-03-06 06:07:10
input_ = pd.DataFrame()
input_ ['ID'] = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
input_ ['ST'] = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
input_ ['V'] = ['NaN', 'NaN', 1, 1, 'NaN', 1,'Nan', 1, 'NaN', 'NaN', 'NaN', 'NaN']
input_1 = pd.DataFrame(input_)
print(input_1)
input_1.drop(0, inplace = True)
input_1.drop(4, inplace = True)
input_1.drop(8, inplace = True)
print(input_1)https://stackoverflow.com/questions/66501877
复制相似问题