首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫群的条件与数据的重新塑造

熊猫群的条件与数据的重新塑造
EN

Stack Overflow用户
提问于 2020-02-20 18:16:54
回答 2查看 60关注 0票数 1

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

代码语言:javascript
运行
复制
               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             

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

代码语言:javascript
运行
复制
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

此代码不起作用:

代码语言:javascript
运行
复制
df = finalDF.assign(Missing Count = finalDF.eq("MISSING").sum(axis=1))
.groupby(['A','B','C']) ['Missing Count'].count()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-20 18:29:11

使用:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
df[['D', 'E', 'F']].eq('MISSING')

第一步DataFrame.assign**

代码语言:javascript
运行
复制
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

这是一种动态的方法,可以在列中使用DataFrame或TrueFalse来计算缺少的值。要理解**,您可以看到:What is the purpose and use of **kwargs?What does ** (double star/asterisk) and * (star/asterisk) do for parameters?

第二步

现在我们可以计算,其中一个简单的方法是通过DataFrame.pivot_table,我们也可以使用groupby

代码语言:javascript
运行
复制
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

最终:使用DataFrame.reset_indexDataFrame.melt

之前不要丢失有关index的信息。

代码语言:javascript
运行
复制
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 + reset_index也可以工作得很好。但是我们需要以前的.rename_axis(columns = 'Column Name')reset_index之前的.rename('Missing Count')

DataFrame.sort_values,以获得预期的输出排序。

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

票数 0
EN

Stack Overflow用户

发布于 2020-02-20 18:35:06

代码语言:javascript
运行
复制
df = pd.melt(df, id_vars=['A','B'])
df.rename(columns={'variable':'Column Name'}, inplace=True)
df[df['value']=='MISSING'].groupby(['A','B', 'Column Name']).count().reset_index()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60326254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档