这是我的数据框:
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
答案 0 :(得分:1)
一种方法是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