Как использовать значения в столбце, чтобы определить, какой столбец нужно анализировать в другом кадре данных? - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть два фрейма данных pandas, один с необработанными данными, а другой - результат анализа, основанный на анализе данных первого фрейма данных.Ниже приведены настройки:

df1
P1T P2T P3T
P   N   P
N   P   U
P   P   U
U   U   N

df2
Indicator  Indicator State   Occurrences
P1T        P
P1T        N
P1T        U
P2T        P
P2T        N
P2T        U
P3T        P
P3T        N
P3T        U

В df1 каждый столбец представляет «Индикатор», и каждый индикатор может иметь три состояния: «P», «N» или «U».

df2 перечисляет каждый «Индикатор» и диапазон состояний, которые он может иметь, каждое из которых представляет отдельный случай.Затем предполагается подсчитать количество вхождений каждого случая и вывести это число в столбец «Вхождения».То есть

df2
Indicator   Indicator State   Occurrences
P1T         P                 2
P1T         N                 1
P1T         U                 1
P2T         P                 2
P2T         N                 1
P2T         U                 1
P3T         P                 1
P3T         N                 1
P3T         U                 2

Можно ли использовать значение в столбце df2['Indicators'], чтобы указать столбец в df1 для выполнения подсчета, а затем значение в столбце df2['Indicator State'], чтобы предоставитьусловие "контрагента"?

1 Ответ

0 голосов
/ 12 декабря 2018

Используйте melt с groupby и size для MultiIndex Series:

df3 = (df1.melt(var_name='Indicator', value_name='Indicator State')
         .groupby(['Indicator','Indicator State'])
         .size()
         .rename('Occurrences'))

Другое решение сvalue_counts и unstack:

df3 = df1.apply(lambda x: x.value_counts()).unstack().rename('Occurrences')

print (df3)
Indicator  Indicator State
P1T        N                  1
           P                  2
           U                  1
P2T        N                  1
           P                  2
           U                  1
P3T        N                  1
           P                  1
           U                  2
Name: Occurrences, dtype: int64

Последний join до оригинала DataFrame:

#if necessary remove only NaN column 
df2 = df2.drop('Occurrences', axis=1)
df2 = df2.join(df3, on=['Indicator','Indicator State'])
print (df2)
  Indicator Indicator State  Occurrences
0       P1T               P            2
1       P1T               N            1
2       P1T               U            1
3       P2T               P            2
4       P2T               N            1
5       P2T               U            1
6       P3T               P            1
7       P3T               N            1
8       P3T               U            2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...