【问题标题】:Python pandas to mimic excel pivot tablePython pandas 模仿 excel 数据透视表
【发布时间】:2014-08-26 05:49:25
【问题描述】:

来自 Excel,非常愿意改用 Pandas 我正在阅读 Wes McKinneys 的书……从中获得了很多乐趣……但也尝试了一些我自己的东西……

假设我们有一个可以通过以下 csv 文件读取的数据框:

city,inhabitants,city_type,county
city a,9483,city,diggersville
city b,2628,city,diggersville
city c,5206,city,diggersville
city d,5206,city,diggersville
city e,839,village,crazytown
city f,3574,city,crazytown
city g,35,village,crazytown
city h,8214,city,downsend
city i,4278,city,downsend

所以我的代码是这样的:

data = pd.read_csv('test.txt')

我想根据县和城市类型组合计算以下两件事:

  1. 居民总数
  2. 城市/村庄的计数

并且我希望将这些彼此作为我生成的数据框中的列。

我知道如何计算两个单独的事实:

data.groupby(['city_type','county']).sum()
data.groupby(['city_type','county']).city.count()

但如上所述,我希望将这些组合到一个结果数据框中(如 Excel 中的数据透视表):

                         my_count   my_sum
city_type  county      
city       crazytown       1          3574
           diggersville    4         22523 
           downsend        2         12492
village    crazytown       2           874

感谢任何关于如何完成的帮助,因为我真的想向我的同事展示 Python 非常简单:)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以pass a dict to the agg method。键是列名,每个值是您希望用来聚合列的相应函数:

    In [98]: data.groupby(['city_type','county']).agg(
                 {'city': 'count', 'inhabitants': 'sum'})
    Out[98]: 
                            inhabitants  city
    city_type county                         
    city      crazytown            3574     1
              diggersville        22523     4
              downsend            12492     2
    village   crazytown             874     2
    

    【讨论】:

    • 这就是我喜欢 StackOverflow 的原因......在 4 分钟内有人能够回答我的问题......谢谢 unutbu !!!
    • 对于那些也在阅读本书的人......这将在第 262 页及更多......对我来说更真实的生活..
    • 请注意,pandas 具有 pivot_table 用于电子表格的功能,如 pandas.pydata.org/pandas-docs/stable/generated/… 中记录的数据透视表,尽管我(作为非 Excel 人员)发现 @unutbu 的解决方案更容易理解。
    猜你喜欢
    • 2021-10-16
    • 2021-05-24
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    相关资源
    最近更新 更多