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

Python 如何删除每个子类别的所有NaN列?,python,pandas,Python,Pandas,我有一个这样的python数据框架,其中包含大量的列和行。我想删除属于同一类别的每个子类别的所有带有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

我有一个这样的python数据框架,其中包含大量的列和行。我想删除属于同一类别的每个子类别的所有带有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
移除子类别的cond1后。k、 输出数据帧应该如下所示。我有许多列包含子类别的所有NaN。例如subcat。假设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

以下是可复制的数据帧示例:

     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')

然后:


现在还不清楚如何从数据帧中删除行/系列,但这应该给您一个开始…

您可以发布一个您想要的输出示例吗?我不太清楚你到底想要什么。如果您有任何尝试过的代码,发布这些代码(或简短的摘录)将帮助人们看到您的错误所在。如果每列中至少有一个NaN,那么您所问的问题似乎最终将没有任何列。您是否可以描述一下您试图获取的内容,即为什么需要删除NaN,而不是替换它们?或者,您只是想简单地聚合每列的条件,在这种情况下,您可能希望最终得到一个具有有效条件的列数组。目标是减少每个子类的列数。属于某一类别的。我有一小部分类别,每个类别有n个子类别。这是您想要的最终输出,还是执行子类别
k
操作后的输出?谢谢Alex。这很有效。我的下一个新手问题是如何将输出存储到单独的数据帧中?k、p和t的数据帧。您需要提供一些您期望的指示。这些组可以组合在一起,但如果列不匹配,则只会得到NaN。对于gb中的n,g:s_df=g.dropna(axis=1),how='all')#删除子类别的所有空列。break s_df#这只打印其中一个子类别(k)的数据帧。我想为k、t和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