python - Pandas DataFrame 中的前导和尾随填充日期
问题描述
这是我的数据框:
df = pd.DataFrame.from_records(data=data, coerce_float=False, index=['date'])
# date field a datetime.datetime values
account_id amount
date
2018-01-01 1 100.0
2018-01-01 1 50.0
2018-06-01 1 200.0
2018-07-01 2 100.0
2018-10-01 2 200.0
问题描述
如何用前导和尾随“空日期”“填充”我的数据框。我试图在 date_range 和 period_range 上重新索引,我试图合并另一个索引。我一整天都在尝试各种事情,并且阅读了很多文档。
我有一个简单的数据框,其中包含transaction_date
、transaction_amount
和transaction_account
. 我想对这个数据框进行分组,以便在第一级按帐户分组,然后按年分组,然后按月分组。然后我想要每个月的一列,其中包含sum
该月的交易金额值。
这似乎应该是很容易做到的事情。
预期产出
这是我得到的最接近的:
df = pd.DataFrame.from_records(data=data, coerce_float=False, index=['date'])
df = df.groupby(['account_id', df.index.year, df.index.month])
df = df.resample('M').sum().fillna(0)
print(df)
account_id amount
account_id date date date
1 2018 1 2018-01-31 2 150.0
6 2018-06-30 1 200.0
2 2018 7 2018-07-31 2 100.0
10 2018-10-31 2 200.0
这就是我想要实现的(基本上通过重新索引数据date_range(start='2018-01-01', period=12, freq='M')
(理想情况下,我希望月份按年份在顶部作为列转置)
amount
account_id Year Month
1 2018 1 150.0
2 NaN
3 NaN
4 NaN
5 NaN
6 200.0
....
12 200.0
2 2018 1 NaN
....
7 100.0
....
10 200.0
....
12 NaN
解决方案
一种方法是reindex
s=df.groupby([df['account_id'],df.index.year,df.index.month]).sum()
idx=pd.MultiIndex.from_product([s.index.levels[0],s.index.levels[1],list(range(1,13))])
s=s.reindex(idx)
s
Out[287]:
amount
1 2018 1 150.0
2 NaN
3 NaN
4 NaN
5 NaN
6 200.0
7 NaN
8 NaN
9 NaN
10 NaN
11 NaN
12 NaN
2 2018 1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 100.0
8 NaN
9 NaN
10 200.0
11 NaN
12 NaN
推荐阅读
- javascript - 更改输入类型文件文本
- asp.net - ASP.NET 4.6 SPA,通过 MsBuild 动态发布整个 wwwroot 内容
- javascript - Highcharts 如何将内联样式添加到 HTML 元素中?
- python - Pyinstaller 的 PyQT5 QFileDialog 问题
- javascript - 如何将加载器图像添加到在其中加载 iframe 的对话框
- laravel - Laravel spatie QueryBuilder GET 请求搜索
- php - php函数的浮动输出
- python - 对于 Postgres Django 的类型字符变化(255)SQLite3 的值太长
- forms - 根据 vueJS 表单输入上的数据道具设置规则
- mysql - 创建存储函数以检索两个日期之间的总金额