如何删除每个子类别的所有NaN列?

时间:2018-10-27 02:28:58

标签: python pandas

我有这种python pandas数据框,其中包含大量的列和行。我想删除属于同一类别的每个子类别的所有带有NaN的列。如何删除每个子类别的所有NaN列?

     Categ. Subcat. cond1 cond2 cond3 cond4 condk
0    A          k     NaN   6     4     9     8
1    A          k     NaN   7     3     NaN   2
2    A          p      8    1     NaN   NaN   3
3    A          s      4    NaN   2     8     NaN
4    A          t     NaN   3     NaN   4     1
5    A          t      2    9     NaN   5     4

为Subcat删除cond1之后。 k,输出数据帧应如下所示。我有许多列,其中包含子类别的所有NaN。例如子猫k假设有10列/ cond1,cond5,cond9,con20等,其中NaN作为此特定子类别的值。

Categ. Subcat. cond2 cond3 cond4...condk 
A          k      6    4     9     8 
A          k      7    3    NaN    2
A          p      1   NaN   NaN    3
A          s     NaN   2     8    NaN 
A          t      3   NaN    4     1 
A          t      9   NaN    5     4

1 个答案:

答案 0 :(得分:0)

以下是示例DataFrame,因此它是可复制的:

     Categ. Subcat. cond1 cond2 cond3 cond4 condk
0    A          k     NaN   6     4     9     8
1    A          k     NaN   7     3     NaN   2
2    A          p      8    1     NaN   NaN   3
3    A          s      4    NaN   2     8     NaN
4    A          t     NaN   3     NaN   4     1
5    A          t      2    9     NaN   5     4

df = df.rename(columns={'Categ.':'C', 'Subcat.':'S'})

您可以这样分组:gb = df.groupby('S')

然后:

for n, g in gb:
    print(n, '\n', g.dropna(axis=1))
k
    C  S  cond2  cond3  condk
0  A  k    6.0    4.0    8.0
1  A  k    7.0    3.0    2.0
p
    C  S  cond1  cond2  condk
2  A  p    8.0    1.0    3.0
s
    C  S  cond1  cond3  cond4
3  A  s    4.0    2.0    8.0
t
    C  S  cond2  cond4  condk
4  A  t    3.0    4.0    1.0
5  A  t    9.0    5.0    4.0

目前还不清楚您要如何从DataFrame中删除行/系列,但这应该可以让您开始...