首页 > 解决方案 > 在同一列中查找具有非空值的行

问题描述

假设我有一个数据框

import numpy
import pandas 
ar = numpy.array([[1.2, 2.1, 0, 1.3], [0, 0, 1.2, 1.5], [2.1, 1.3, 0, 5.6],  [0, 0, 2.4, 3.7]])
df = pandas.DataFrame(ar, index = ['0', '1', '2', '3'], columns = ['colA', 'colB', 'colC', 'colD'])



index colA  colB  colC  colD ......
0      1.2   2.1   0    1.3
1      0      0    1.2   1.5
2      2.1    1.3  0     5.6
3      0      0    2.4   3.7
4

我想在相同的列中获取具有非空值的行,例如第 0 行和第 2 行,然后是第 1 行和第 3 行,因为它们在同一列中具有非空值。我该怎么做呢?非空值可以不同

预期产出

 df1 =   index colA  colB  colC  colD ......
    0      1.2   2.1   0    1.3
    2      2.1    1.3  0     5.6
    
   

df2 =    index colA  colB  colC  colD 
   
    1      0      0    1.2   1.5
    3      0      0    2.4   3.7

标签: pandas

解决方案


缺少值不是,因此使用0intead ,然后将布尔值转换为字符串并求和并传递给:df.isna()df.eq(0)DataFrame.groupby

g = df.eq(0).astype(str).sum(axis=1)
#alternative solution
#g = df.eq(0).apply(tuple, axis=1)

for i, g in df.groupby(g):
    print (g)
   colA  colB  colC  colD
0   1.2   2.1   0.0   1.3
2   2.1   1.3   0.0   5.6
   colA  colB  colC  colD
1   0.0   0.0   1.2   1.5
3   0.0   0.0   2.4   3.7

对于 DataFrames 列表,请使用:

dfs = [g for i, g in df.groupby(g)]

然后可以通过索引选择:

print (dfs[0])
print (dfs[1])

推荐阅读