在Pandas DataFrame中提取和分组列集

时间:2017-09-09 04:31:23

标签: python pandas dataframe pandas-groupby

我有一个从CSV文件派生的DataFrame结构,用于人口统计数据多年。也就是说,文件中的列是每月时间间隔(1999-01,1999-02 ... 2016-12),行是世界上不同的人口中心(例如伦敦,多伦多,波士顿等):

df = pd.DataFrame({'1999-01' : [100, 5000, 8000], '1999-02' : [200, 6000, 9000], '1999-03' : [300, 7000, 10000], ..., cities : ['CityA', 'CityB', 'CityC' ...]})

我想按季度隔离这些专栏。因此,我将从1999-01,1999-02,1999-9中获取每行的平均人口数,并为此条目创建一个新列“1999Q1”,每3个月执行一次:

df_quarter = pd.DataFrame({'1999Q1' : [200, 6000, 9000], '1999Q2' : ..., cities = ['CityA', 'CityB', 'CityC' ...]})

#Q1 corresponds to months 01-03, Q2 to months 04-06, Q3 to months 07-09, Q4 months 10-12, all inclusive

但是,我很难将查询概念化以实现此目的。我有半心半意使用.groupby()然后.agg(),但我不确定如何有效地指定3列分组并迭代列。有人可以指出我正确的方向吗?

编辑:假设列不是日期,而是更抽象的东西,并且不能使用简单的时间段重新采样。例如:

#Prices of different foods from different vendors
df = pd.DataFrame({'oranges' : [2, 3, 7], 'apples' : [6, 3, 9], 'cheese' : [13, 9, 11], 'milk' : [6, 5, 12], 'vendors' : ['VendorA', 'VendorB', 'VendorC']})

现在,如果我想创建两个专栏,结合水果和奶制品,我是否可以通过某种方式指定聚合的指数?

1 个答案:

答案 0 :(得分:0)

您可以先将to_datetime列转换为month period,然后转换为to_period,然后resample转换为列{(1}})和axis=1quarter}汇总q

mean