Python 仅当列组不仅包含nan值时才更改nan值
我有一个数据框架,其中列组属于一起。现在,我想每行测试以下内容:Python 仅当列组不仅包含nan值时才更改nan值,python,pandas,data-cleaning,Python,Pandas,Data Cleaning,我有一个数据框架,其中列组属于一起。现在,我想每行测试以下内容: 如果特定列组的所有行均为nan,则不执行任何操作 如果该组列(每行)中只有部分列为nan,请将其更改为另一个值(例如,更改为999) 因此,如果这是我的初始数据帧(以下列组属于一起:组1:Q1_1,Q1_2,Q1_3;组2:Q2_1,Q2_2) 这应该是结果: ID Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 1 nan nan nan 2 999 2 999 3 999
ID Q1_1 Q1_2 Q1_3 Q2_1 Q2_2
1 nan nan nan 2 999
2 999 3 999 3 1
3 5 4 4 5 5
4 2 4 3 5 4
这样试试。创建一个布尔掩码
m
,以标识列组中的所有nan
。使用999
填充所有nan
,并使用mask
切换回所有nan
import numpy as np
m = df.isna().groupby(df.columns.str.split('_').str[0], axis=1).transform('all')
df_final = df.fillna(999).mask(m, np.nan)
Out[74]:
ID Q1_1 Q1_2 Q1_3 Q2_1 Q2_2
0 1 NaN NaN NaN 2 999.0
1 2 999.0 3.0 999.0 3 1.0
2 3 5.0 4.0 4.0 5 5.0
3 4 2.0 4.0 3.0 5 4.0
import numpy as np
m = df.isna().groupby(df.columns.str.split('_').str[0], axis=1).transform('all')
df_final = df.fillna(999).mask(m, np.nan)
Out[74]:
ID Q1_1 Q1_2 Q1_3 Q2_1 Q2_2
0 1 NaN NaN NaN 2 999.0
1 2 999.0 3.0 999.0 3 1.0
2 3 5.0 4.0 4.0 5 5.0
3 4 2.0 4.0 3.0 5 4.0