Как сгруппировать столбец и подсчитать общее количество других столбцов, исключая NaN? - PullRequest
0 голосов
/ 20 апреля 2019
df = pd.DataFrame(
        {'ST': list('AABBBC'), 
         'NO': [5.3, 1.2, np.nan, 2.3, 4.2, 1.5],
         'CO':[3.4,np.nan, 4.1, 2.5,np.nan, 3.6]})
print (df)
  ST   NO   CO
0  A  5.3  3.4
1  A  1.2  NaN
2  B  NaN  4.1
3  B  2.3  2.5
4  B  4.2  NaN
5  C  1.5  3.6

enter image description here

Как сгруппировать столбец и подсчитать общее количество других столбцов, исключая NaN в Python?

Ответы [ 2 ]

1 голос
/ 20 апреля 2019

Используйте GroupBy.count для значений счетчика, исключая NaN s, и измените их на DataFrame.stack - вывод равен MultiIndex Series:

s = df.groupby('ST').count().stack()
print (s)
ST    
A   NO    2
    CO    1
B   NO    2
    CO    2
C   NO    1
    CO    1
dtype: int64

Еслинужно DataFrame:

df1 = df.groupby('ST').count().stack().rename_axis(('ST','NEW')).reset_index(name='VAL')
print (df1)
  ST NEW  VAL
0  A  NO    2
1  A  CO    1
2  B  NO    2
3  B  CO    2
4  C  NO    1
5  C  CO    1
0 голосов
/ 20 апреля 2019
df = pd.DataFrame(
        {'ST': list('AABBBC'), 
         'NO': [5.3, 1.2, np.nan, 2.3, 4.2, 1.5],
         'CO':[3.4,np.nan, 4.1, 2.5,np.nan, 3.6]})

Вы также можете сделать это в 2 шага с помощью комбинации функций melt и pivot_table: использовать функцию плавления для переформатирования формы информационного кадра

cols=['NO','CO'] 

df_melt=pd.melt(df,id_vars=['ST'],value_vars=cols) 

А затем с помощью сводной таблицы создайте новый фрейм данных и подсчитайте значения

df_pivot=pd.pivot_table(df_melt,index=['ST','variable'],values='value',aggfunc='count').reset_index() 

Result:
    ST  variable    value
0   A   CO  1
1   A   NO  2
2   B   CO  2
3   B   NO  2
4   C   CO  1
5   C   NO  1
...