I have a df:
col1 col2 col3 col4 col5
bat cell val val
cat ribo val val
rat dna val val
dog rna val val val
如果我正在比较col4和col5,我想获得的输出为:
col1 col2 col3 col4 col5
dog rna val val val
因为col4有值,而col5有值。
如果我比较col3和col5,我应该得到的输出为:
col1 col2 col3 col4 col5
bat cell val val
rat dna val val
dog rna val val val
但是当我使用以下代码时:
dfn = df[df['col4'] != df['col5']]
没有获得正确的df值。
并且我想将输出添加到数据框为:
col1 col2 col3 col5
dog rna val val
答案 0 :(得分:2)
我们可以为此编写一个简单的函数来比较空的列和行:
Boolean indexing
与notnull
一起使用df.replace('', np.NaN, inplace=True)
def compare_cols(dataframe, column1, column2):
return df[df[column1].notnull() & df[column2].notnull()]
print(compare_cols(df, 'col4', 'col5'))
print('\n')
print(compare_cols(df, 'col3', 'col5'))
col1 col2 col3 col4 col5
3 dog rna val val val
col1 col2 col3 col4 col5
0 bat cell val NaN val
2 rat dna val NaN val
3 dog rna val val val
编辑。我们可以将dropna
与subset
一起使用,以产生相同的输出:
dropna
def compare_cols2(dataframe, column1, column2):
return df.dropna(subset=[column1, column2])
print(compare_cols2(df, 'col4', 'col5'))
print('\n')
print(compare_cols2(df, 'col3', 'col5'))
col1 col2 col3 col4 col5
3 dog rna val val val
col1 col2 col3 col4 col5
0 bat cell val NaN val
2 rat dna val NaN val
3 dog rna val val val
注意,我用NaN
替换了空格(''),以便我们可以使用notnull()
方法。
答案 1 :(得分:0)
#can you try below
df1=df.loc[(df['col4'].notnull() & df['col5'].notnull()),:]]
print(df1)