更改pandas数据帧中交叉表的索引

问题描述 投票:0回答:1

我有以下数据帧df。我检索了没有NAN的df子集。

#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的交叉表中缺少类别“good”

df_subset所需的交叉表是:

RE       E1  E2  E3
C_Step             
UNKNOWN   1   2   2
fair      0   1   2
good      0   0   0
poor      2   0   0
python-3.x pandas pandas-groupby
1个回答
2
投票

使用带有参数reindexfill_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
© www.soinside.com 2019 - 2024. All rights reserved.