python-3.x - 使用日期值重塑/透视数据
问题描述
我需要以 2 种方式旋转/重塑长表单数据:1)添加日期列(End-of_month)并填写数值(总计)2)添加日期列(End-of_month)并填写日期值(day-of-在上一个数据透视中达到“总”值的月份)
我可以做1:
data = pd.DataFrame({'date': ['1-12-2016', '1-23-2016', '2-23-2016', '2-1-2016', '3-4-2016'],
'EOM': ['1-31-2016', '1-31-2016', '2-28-2016', '2-28-2016', '3-31-2016'],
'country':['uk', 'usa', 'fr','fr','uk'],
'tr_code': [10, 21, 20, 10,12],
'TOTAL': [435, 367,891,1234,231]
})
data['EOM'] = pd.to_datetime(data['EOM'])
data['date'] = pd.to_datetime(data['date'])
data_total = data.pivot_table(values='TOTAL', index=['country','tr_code'], columns='EOM')
Out[73]:
EOM 2016-01-31 2016-02-28 2016-03-31
country tr_code
fr 10 NaN 1234.0 NaN
20 NaN 891.0 NaN
uk 10 435.0 NaN NaN
12 NaN NaN 231.0
usa 21 367.0 NaN NaN
但是,尝试使用“日期”更改值参数会产生:DataError: No numeric types to aggregate
我基本上想要两个df - 我完成的一个,另一个格式相同的,但不是“TOTAL”值,而是完成该总数的“日期”。
任何帮助是极大的赞赏。
解决方案
set_index
和unstack
这假设 的组合['country', 'tr_code', 'EOM']
是唯一的,如果不是,则会中断。这就是聚合函数很重要的原因。如果以及当我们对组合进行多次观察时,我们需要一个规则。
data.set_index(['country', 'tr_code', 'EOM']).date.unstack()
EOM 2016-01-31 2016-02-28 2016-03-31
country tr_code
fr 10 NaT 2016-02-01 NaT
20 NaT 2016-02-23 NaT
uk 10 2016-01-12 NaT NaT
12 NaT NaT 2016-03-04
usa 21 2016-01-23 NaT NaT
aggfunc
/pivot_table
默认聚合函数是mean
并且对日期没有意义。 first
会做。也可以使用last
ALollz 在他们删除的答案中使用的。
data.pivot_table(
values='date', index=['country', 'tr_code'], columns='EOM', aggfunc='first')
EOM 2016-01-31 2016-02-28 2016-03-31
country tr_code
fr 10 NaT 2016-02-01 NaT
20 NaT 2016-02-23 NaT
uk 10 2016-01-12 NaT NaT
12 NaT NaT 2016-03-04
usa 21 2016-01-23 NaT NaT
groupby
做同样事情的方式不那么迷人pivot_table
data.groupby(['country', 'tr_code', 'EOM']).date.first().unstack()
EOM 2016-01-31 2016-02-28 2016-03-31
country tr_code
fr 10 NaT 2016-02-01 NaT
20 NaT 2016-02-23 NaT
uk 10 2016-01-12 NaT NaT
12 NaT NaT 2016-03-04
usa 21 2016-01-23 NaT NaT
推荐阅读
- javascript - Typescript数组推送方法无法捕获数组的元组类型
- php - 如何从symfony的公共文件夹中下载pdf文件
- c++ - 如何在 Visual Studio Code 中创建自定义项目模板
- latex - 在 LaTex 中结合 longtable、booktabs 和 xcolor,布局问题
- c - 如何访问可变参数打印函数的变量值?
- java - 如何使用 ENUM 列出角色?
- python - 将列表与 numpy 浮点数与常规浮点数进行比较
- python - df.groupby(.pdGrouper(freq='D') ).idxmax 抛出 ValueError
- html - SASS 网格重复出现在屏幕外
- python - 使用 rb 模式打开为 f 是什么?