pandas - 在同一列中查找具有非空值的行
问题描述
假设我有一个数据框
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
解决方案
缺少值不是,因此使用0
intead ,然后将布尔值转换为字符串并求和并传递给: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])