python - 过滤数据透视表列中的值

标签 python pandas

如果我想按特定时间段聚合值/对列求和,如何使用数据透视表来实现?例如,在下表中,如果我想要 2000 - 2001 年和 2002 - 2004 年之间的水果总数,我会编写什么代码?目前我已经有了这个:

import pandas as pd
import numpy as np


UG = pd.read_csv('fruitslist.csv', index_col=2)
UG = UG.pivot_table(values = 'Count', index = 'Fruits', columns = 'Year', aggfunc=np.sum)
UG.to_csv('fruits.csv')

这个返回值对每个年份的每种水果进行计数,但我似乎无法按十年进行汇总(例如 90 年代、00 年代、2010 年代)

Fruits    Count   Year

Apple     4       1995

Orange    5       1996

Orange    6       2001

Guava     8       2003

Banana    6       2010

Guava     8       2011

Peach     7       2012

Guava     9       2013

提前致谢!

最佳答案

这可能会有所帮助。将 groupby 中的 Year 列转换为十年,然后聚合。

"""
Fruits    Count   Year

Apple     4       1995

Orange    5       1996

Orange    6       2001

Guava     8       2003

Banana    6       2010

Guava     8       2011

Peach     7       2012

Guava     9       2013
"""

df = pd.read_clipboard()

output = df.groupby([
    df.Year//10*10,
    'Fruits'
]).agg({
    'Count' : 'sum'
})

print(output)

             Count
Year Fruits       
1990 Apple       4
     Orange      5
2000 Guava       8
     Orange      6
2010 Banana      6
     Guava      17
     Peach       7
<小时/>

编辑

如果您想按不同的数量对年份进行分组,例如每 2 年,只需更改年份组:

print(df.groupby([
    df.Year//2*2,
    'Fruits'
]).agg({
    'Count' : 'sum'
}))

             Count
Year Fruits       
1994 Apple       4
1996 Orange      5
2000 Orange      6
2002 Guava       8
2010 Banana      6
     Guava       8
2012 Guava       9
     Peach       7

关于python - 过滤数据透视表列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52787453/

相关文章:

python - 如何在python中生成随机数字序列?

python - 相当于 pandas.DataFrame.div 但就地而不是复制?

python - 如何展平多级/嵌套 JSON?

python - Python 中的基本素数生成器

javascript - 如何在 chartjs 中绘制多个时间序列,其中每个时间序列都有不同的时间

python - top 报告的 Python 线程的 ID

python - 如何从 Python Pandas 系列或数据框中的行中删除省略号,当长行/宽列被截断时显示?

python - Pandas dataframe - 如何连接具有相同列的多个数据框

python - 如何拆分具有多个选项的 Pandas 系列?

python - 从列表格式的数据框列中删除重复项