как считать Истинные и Ложные мультииндексов в пандах? - PullRequest
0 голосов
/ 04 июля 2018

Я использую мультииндекс в пандах.

Пример 1:

'info'       '2002'     '2003'     '2004'
'PID' 'Age'  't1' 't2'  't1' 't2'  't1' 't2'
 101   30     Nan  2     2    1     Nan  Nan
 102   28     2    5     1    Nan   10   100   

Я хочу знать количество вещей, которые стоят того же.

[число] и [число] истинно

[Nan] и [num] - True

[Нан] и [Нан] Ложь

Пример 2:

'info'       
'PID' 'Age' 'count' 
 101   30      2
 102   28      3

так что я думаю использовать any (), но я не решил это.

1 Ответ

0 голосов
/ 04 июля 2018

Я думаю, что нужно, если MultiIndex также в индексе сначала проверяет notna всех значений, а затем проверяет по крайней мере один на первый уровень MultiIndex в столбцах на DataFrameGroupBy.any и последний счет True с sum:

print (df.index)
MultiIndex(levels=[[101, 102], [28, 30]],
           labels=[[0, 1], [1, 0]])

df = df.notna().groupby(axis=1, level=0).any().sum(axis=1)
#oldier pandas versions
#df = df.notnull().groupby(axis=1, level=0).any().sum(axis=1)

Если в индексе нет MultiIndex, добавьте drop для удаления info level:

print (df.index)
RangeIndex(start=0, stop=2, step=1)

s = df.drop('info', level=0, axis=1).notnull().groupby(axis=1, level=0).any().sum(axis=1)
print (s)
0    2
1    3
dtype: int64

И если нужно создать столбец по позиции, используйте insert:

df.insert(2, ('info','count'), s)
print (df)
   info             '2002'      '2003'      '2004'       
  'PID' 'Age' count   't1' 't2'   't1' 't2'   't1'   't2'
0   101    30     2    NaN    2      2  1.0    NaN    NaN
1   102    28     3    2.0    5      1  NaN   10.0  100.0
...