Как правильно считать нули в группе строк в пандах DataFrame

Вы можете обернуть r-скрипт в сценарии bash и получить путь к скрипту как переменную bash следующим образом:

#!/bin/bash
     # [environment variables can be set here]
     path_to_script=$(dirname $0)

     R --slave<<EOF
        source("$path_to_script/other.R")

     EOF
1
задан Peter.k 18 January 2019 в 14:34
поделиться

2 ответа

Сначала set_index и проверьте все пропущенные значения с подсчетом по sum, а затем объедините count с sum:

df = tdf.set_index('indicator').isnull().sum(axis=1).groupby(level=0).agg(['count','sum'])
print (df)
           count  sum
indicator            
A              2    3
B              2    7
C              1    0

Деталь [1113 ]:

print (tdf.set_index('indicator').isnull().sum(axis=1))
indicator
A    2
A    1
B    4
B    3
C    0
dtype: int64

Другое решение - использовать функцию с GroupBy.apply :

def func(x):
    a = len(x)
    b = x.isnull().values.sum()
    return pd.Series([a,b],index=['indicator count','nulls count'])

df = tdf.set_index('indicator').groupby('indicator').apply(func)
print (df)
           indicator count  nulls count
indicator                              
A                        2            3
B                        2            7
C                        1            0
0
ответ дан jezrael 18 January 2019 в 14:34
поделиться

Я нашел почти удовлетворительный ответ сам: (минусы: слишком сложно). Например, в R я использовал бы матрицу RowSums для is.na(df). Это так, но, к сожалению, больше кодирования.

def count_nulls_rowwise_by_group(tdf, group):
    cdf = pd.concat([tdf[group], pd.isnull(tdf).sum(axis=1).rename('nulls')], axis=1)
    return cdf.groupby(group).agg({group: 'count', 'nulls': 'sum'}).rename(index=str, columns={group: 'count'})

count_nulls_rowwise_by_group(tdf)

дает:

Out[387]: 
           count  nulls
indicator              
A              2      3
B              2      7
C              1      0
0
ответ дан Peter.k 18 January 2019 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: