如何在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