Изменить индекс кросс-таблицы в панде - PullRequest
0 голосов
/ 21 января 2019

У меня следующий фрейм данных df.Я получил подмножество df без NAN.

#df is:

    DT   RE   FE   SE   C_Step
0   D1   E1   F1   S1     poor
1   D2   E3   F2  NaN  UNKNOWN
2   D1   E3  NaN   S2  UNKNOWN
3   D1  NaN   F1   S1     poor
4   D2  NaN   F1   S2     poor
5   D2   E3  NaN   S1     fair
6   D1   E3   F1   S2     fair
7   D2   E2   F1   S1  UNKNOWN
8   D2   E2   F1   S1     fair
9   D2   E2  NaN  NaN     good
10  D2   E2   F1   S1  UNKNOWN
11  D1   E3   F2   S1  UNKNOWN
12  D2   E1   F2   S2  UNKNOWN
13  D2   E1   F1   S2     poor
14  D2   E3   F1   S1     fair
15  D1   E3   F1   S2  UNKNOWN



df_subset = df[~(df.iloc[:, 0:4].isnull().any(1))]
print(df_subset)

#df_subset is:

    DT  RE  FE  SE   C_Step
0   D1  E1  F1  S1     poor
6   D1  E3  F1  S2     fair
7   D2  E2  F1  S1  UNKNOWN
8   D2  E2  F1  S1     fair
10  D2  E2  F1  S1  UNKNOWN
11  D1  E3  F2  S1  UNKNOWN
12  D2  E1  F2  S2  UNKNOWN
13  D2  E1  F1  S2     poor
14  D2  E3  F1  S1     fair
15  D1  E3  F1  S2  UNKNOWN

После этого я пытаюсь сделать кросс-таблицу из фреймов данных df и df_subset, 'C_Step' для индекса и 'RE' для столбца

Кросс-таблицу из df:

c1 = pd.crosstab([df.C_Step],[df.RE],dropna=True)
print(c1)

RE       E1  E2  E3
C_Step             
UNKNOWN   1   2   4
fair      0   1   3
good      0   1   0
poor      2   0   0

Кросс-таблица из df_subset:

c1 = pd.crosstab([df_subset.C_Step],[df_subset.RE],dropna=False)
print(c1)

RE       E1  E2  E3
C_Step             
UNKNOWN   1   2   2
fair      0   1   2
poor      2   0   0

Вопрос: Индекс обеих кросс-таблиц различен.Как я могу иметь индекс кросс-таблицы, сгенерированный из 'df_subset', такой же, как 'df'?Категория «хорошо» отсутствует в кросс-таблице df_subset

T он желает кросс-таблица df_subset:

RE       E1  E2  E3
C_Step             
UNKNOWN   1   2   2
fair      0   1   2
good      0   0   0
poor      2   0   0

1 Ответ

0 голосов
/ 21 января 2019

Используйте reindex с параметром fill_value=0:

c2 = pd.crosstab([df_subset.C_Step], [df_subset.RE], dropna=False)
c2 = c2.reindex(c1.index, fill_value=0)

print(c2)
RE       E1  E2  E3
C_Step             
UNKNOWN   1   2   2
fair      0   1   2
good      0   0   0
poor      2   0   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...