python pandas: лямбда или другой метод для подсчета значений NaN / len (value) <1 по строкам - PullRequest
0 голосов
/ 10 мая 2019

Вывести новый столбец панд на основе длины строки в других столбцах

Я хочу посчитать количество столбцов, которые имеют значение в каждой строке, и создать новый столбец с этим номером. Предположим, что если у меня 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

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Используйте DataFrame.filter с Series.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
1 голос
/ 10 мая 2019

Или используйте filter, replace и count:

df['Count_J_cols_have_values'] = df.filter(regex='^J').replace('',np.nan).count(1)
df['count_a_cols_have_values'] = df.filter(regex='^a').replace('',np.nan).count(1)
...