Python pandas 模拟 Excel 数据透视表

3 投票
1 回答
2271 浏览
提问于 2025-04-18 18:30

我之前用Excel,现在很想转到Pandas,所以我在看Wes McKinney的书……觉得非常有趣……同时也在尝试一些自己的东西……

假设我们有一个数据框,可以通过下面这个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是多么简单 :)

1 个回答

4

你可以把一个字典传给 agg 方法。字典里的键是列的名字,而每个值则是你想用来处理这个列的函数:

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

撰写回答