熊猫分组条件并重新整形数据框

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

我有以下数据框,其中我试图计算按A,B和C分组的每列的“ MISSING”值的总数,但是我试图将其保持在以下格式,我不确定是否我必须重塑数据框或使用堆栈:


               A   B           C        D        E        F  
0     Miami Heat  FL  Basketball       21  MISSING  MISSING            
1     Miami Heat  FL  Basketball       17  MISSING  MISSING            
2     Miami Heat  FL  Basketball  MISSING       12       23             
3  Orlando Magic  FL  Basketball  MISSING        5  MISSING             
4  Orlando Magic  FL  Basketball       10  MISSING  MISSING             
5  Orlando Magic  FL  Basketball        5  MISSING  MISSING             

这就是我希望得到的结果:

A        B   Column Name   Missing Count
Miami   Heat FL  D             1
Miami   Heat FL  E             2
Miami   Heat FL  F             2
Orlando Magic FL D             1
Orlando Magic FL E             2
Orlando Magic FL F             3

此代码无效:

df = finalDF.assign(Missing Count = finalDF.eq("MISSING").sum(axis=1))
.groupby(['A','B','C']) ['Missing Count'].count()

python pandas
2个回答
0
投票

用途:

new_df = (df.assign(**df[['D', 'E', 'F']].isnull())
            .pivot_table(index=['A', 'B'], values=['D', 'E', 'F'], aggfunc='sum')
            .reset_index()
            .melt(['A', 'B'], var_name='Column Name', value_name='Missing Count')
            .sort_values('A'))
print(new_df)
               A   B Column Name  Missing Count
0     Miami Heat  FL           D            1.0
2     Miami Heat  FL           E            2.0
4     Miami Heat  FL           F            2.0
1  Orlando Magic  FL           D            1.0
3  Orlando Magic  FL           E            2.0
5  Orlando Magic  FL           F            3.0

如果不是NaN

df[['D', 'E', 'F']].eq('MISSING')

第一步DataFrame.assignDataFrame.assign

**

这是一种动态方式,可以在我们要计算缺失值的列中使用print(df.assign(**df[['D', 'E', 'F']].isnull())) A B C D E F 0 Miami_Heat FL Basketball False True True 1 Miami_Heat FL Basketball False True True 2 Miami_Heat FL Basketball True False False 3 Orlando_Magic FL Basketball True False True 4 Orlando_Magic FL Basketball False True True 5 Orlando_Magic FL Basketball False True True True创建DataFrame。要了解False,您可以看到:**What is the purpose and use of **kwargs?

第二步骤

现在我们可以计数,一种简单的方法是按What does ** (double star/asterisk) and * (star/asterisk) do for parameters?,我们也可以使用DataFrame.pivot_table

DataFrame.pivot_table

我建议您看:groupby

最后:使用print(df.assign(**df[['D', 'E', 'F']].isnull()) .pivot_table(index=['A', 'B'], values=['D', 'E', 'F'],aggfunc='sum')) D E F A B Miami_Heat FL 1.0 2.0 2.0 Orlando_Magic FL 1.0 2.0 3.0 How pivot a DataFrame以前不会丢失有关How pivot a DataFrame的信息。

DataFrame.melt

也许在这里DataFrame.melt + DataFrame.reset_index也可以很好地工作。但是我们需要先DataFrame.reset_indexindex之前的print(df.assign(**df[['D', 'E', 'F']].isnull()) .pivot_table(index=['A', 'B'], values=['D', 'E', 'F'], aggfunc = 'sum') .reset_index() .melt(['A', 'B'], var_name='Column Name', value_name='Missing Count')) A B Column Name Missing Count 0 Miami_Heat FL D 1.0 1 Orlando_Magic FL D 1.0 2 Miami_Heat FL E 2.0 3 Orlando_Magic FL E 2.0 4 Miami_Heat FL F 2.0 5 Orlando_Magic FL F 3.0


DataFrame.stack为了得到期望的输出排序。

我们也可以先融化然后再数。...


0
投票
DataFrame.stack
© www.soinside.com 2019 - 2024. All rights reserved.