Вы можете обернуть 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
Сначала 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
Я нашел почти удовлетворительный ответ сам: (минусы: слишком сложно). Например, в 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