我有这种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
答案 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中删除行/系列,但这应该可以让您开始...