你好,我在Pandas 的帮助下做了一个表,然后我创建了一个带有两个索引的透视表.我想像这样对这些数据进行分组,但一个索引是另一个索引的标题.下面我将展示表格中正在发生的事情以及我希望得到的结果 表:

Name Lang Skill Corp
Michael java 2 Google
Piter C++ 3 Facebook
Cristiano python 5 Google
Michael java 1 Facebook
Piter C++ 2 Google
Cristiano python 3 Facebook
Michael java 4 Google
Piter C++ 5 Facebook
Cristiano python 1 Google
Michael python 2 Facebook

我使用:

pivot = pd.pivot_table(df, values="Skill", index=["Corp", "Name"], columns = "Lang", aggfunc="sum")

我有支点:

Corp Name C++ java python
Facebook Cristiano nan nan 3
Facebook Michael nan 1 2
Facebook Piter 8 nan nan
Google Cristiano nan nan 6
Google Michael nan 6 nan
Google Piter 2 nan nan

我想要的结果:

Name C++ java python
Facebook sum_fb sum_fb sum_fb
Cristiano nan nan 3
Michael nan 1 2
Piter 8 nan nan
Google sum_google sum_google sum_google
Cristiano nan nan 6
Michael nan 6 nan
Piter 2 nan nan

先谢谢你

推荐答案

您可以按Corp级别聚合和,这是第一个按GroupBy.sum计算的级别,并使用相同的值将索引追加到MultiIndex:

df1 = (pivot.groupby(level=0).sum()
            .assign(Name = lambda x: x.index)
            .set_index('Name', append=True))

或对多索引使用level=[0,0],仅将必要的集合名称减go DataFrame.rename_axis:

df1 = pivot.groupby(level=[0,0]).sum().rename_axis(['Corp','Name'])
print (df1)         
Lang               C++  java  python
Corp     Name                       
Facebook Facebook  8.0   1.0     5.0
Google   Google    2.0   6.0     6.0

然后附加pivot DataFrame by concat,但这是按DataFrame.sort_index的第一级多索引进行正确排序所必需的,按DataFrame.droplevel移除第一级Corp,最后将Name转换为具有移除列名Lang by DataFrame.rename_axis的列:

df = (pd.concat([df1, pivot])
        .sort_index(level=0, sort_remaining=False)
        .droplevel(0)
        .reset_index()
        .rename_axis(None, axis=1))
print (df)
        Name  C++  java  python
0   Facebook  8.0   1.0     5.0
1  Cristiano  NaN   NaN     3.0
2    Michael  NaN   1.0     2.0
3      Piter  8.0   NaN     NaN
4     Google  2.0   6.0     6.0
5  Cristiano  NaN   NaN     6.0
6    Michael  NaN   6.0     NaN
7      Piter  2.0   NaN     NaN

Python相关问答推荐

如何在Great Table中处理inf和nans

如何在Python中使用Iscolc迭代器实现观察者模式?

Tensorflow tokenizer问题.num_words到底做了什么?

如何在信号的FFT中获得正确的频率幅值

每次查询的流通股数量

PySpark:如何最有效地读取不同列位置的多个CSV文件

python3中np. divide(x,y)和x/y有什么区别?'

关于数字S种子序列内部工作原理的困惑

将参数从另一个python脚本中传递给main(argv

PyTorch变压器编码器中的填充掩码问题

Pandas:新列,从列表中采样,基于列值

使代码更快地解决哪个字母代表给定公式中的哪个数字

获取每行NumPy最大出现次数的所有值

设置邮箱附件的文件类型

如何允许使用点输入进行键验证

为什么我不能在Sphinxcontrib-HttpExample中使用python来换行JSON属性?

为什么在涉及int和调用str()的多重继承的情况下,Python3.7和3.10的MRO似乎有所不同?

如何添加脊椎箭头和偏移脊椎

WinError 193%1不是有效的Win32应用程序.AZ二头肌

在Python中优化乘法FOR循环