如何在python中使用groupby或pivot在这个pandas数据框中[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python中使用groupby或pivot在这个pandas数据框中[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有以下数据帧:

name   state  teams      score

abc    NY      red         1
def    VA      yellow      9
ghi    MO      green       6
abc    WA      red         2
klm    IL      yellow      1
ghi    MN      green       8
def    VA      blue        3
xyz    NY      blue        5
abc    NY      blue        5
abc    NY      red         4
ghi    MN      green       7

我希望以这种方式为每个名称状态组合对数据进行分组,我希望每个团队得分最低,例如我们拥有的数据:名称'abc',州'NY'和团队'red'有两个分数1和4然后在这里团队'red'的得分最低为1。

对于我们没有得分的球队,得分最低可以为0。

示例输出:

name  state   red  yellow  green blue
abc    NY      1    0      0      5
def    VA      0    9      0      3
ghi    MO      0    0      6      0
abc    WA      ....................
klm    IL      ....................
ghi    MN      0    0      7     0     
xyz    NY      0    0     0     5   
答案

Option 1: use groupby and unstack

使用first获取一个值,fill_value中的unstack参数用零替换NaN:

df.groupby(['name','state','teams']).min()['score'].unstack(fill_value=0).reset_index()

输出:

teams name state  blue  green  red  yellow
0      abc    NY     5      0    1       0
1      abc    WA     0      0    2       0
2      def    VA     3      0    0       9
3      ghi    MN     0      8    0       0
4      ghi    MO     0      6    0       0
5      klm    IL     0      0    0       1
6      xyz    NY     5      0    0       0

Option 2: use pd.crosstab

(pd.crosstab([df['name'],df['state']],df['teams'],df['score'],aggfunc='min')\
  .fillna(0)
  .astype(int)
  .reset_index())

Option 3: use pd.pivot_table

(pd.pivot_table(df,'score',['name','state'],'teams',aggfunc='min', fill_value=0)
   .reset_index())

以上是关于如何在python中使用groupby或pivot在这个pandas数据框中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas DF Pivot 和 Groupby

pandas pivot 或 groupby 多列和控制列

MySql Group by 与 Pivot

如何在 Oracle 11g 中使用 group by 和 pivot

当计数为零时熊猫 groupby 以及如何在结果中包含零值

stack,unstack,groupby,pivot_table的区别