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