首页 > 解决方案 > python pandas:lambda或其他计算NaN值/ len(value)<1沿行的方法

问题描述

根据其他列中字符串的长度派生一个新的 pandas 列

我想计算每行中具有值的列数并使用该数字创建一个新列。假设如果我有 6 列,并且两列以具有某个值的开头,那么该行的新列将具有值 2。

df = pd.DataFrame({'ID':['1','2','3'],'ID2':['11','12','13'], 'J1': ['a','ab',''],'J2':['22','','33'],'a1': ['a11','','ab1'],'a2':['22','1','33']})
print df

输出应该是这样的:

  ID  J1  J2 a1 a2 Count_J_cols_have_values count_a_cols_have_values 
0  1   a  22 a11 22             2           2
1  2  ab          1         1           1
2  3  33  ab1   33          1       2

输出应该是这样的:

 ID  J1  J2 a1 a2 Count_J_cols_have_values count_a_cols_have_values 
0  1   a  22 a11 22             2           2
1  2  ab          1         1           1
2  3  33  ab1   33          1       2

标签: pythonpandasnan

解决方案


DataFrame.filterSeries.ne和作为一起使用Series.sum

df['Count_J_cols_have_values'] = df.filter(regex='^J').ne('').sum(1)
df['count_a_cols_have_values'] = df.filter(regex='^a').ne('').sum(1)

print(df)
  ID ID2  J1  J2   a1  a2  Count_J_cols_have_values  count_a_cols_have_values
0  1  11   a  22  a11  22                         2                         2
1  2  12  ab            1                         1                         1
2  3  13      33  ab1  33                         1                         2

推荐阅读