按计数日期分组,用0填充缺失日期



请注意,实际情况下州和国家之间的音量和组合要大得多,而不仅仅是值'usa'

使用以下数据帧:

import pandas as pd
data = pd.DataFrame({'state':['ny','sf','tx','ny','ny'],'country':['usa','usa','usa','usa','usa'],
'Date':['01/01/2020','01/01/2020','01/01/2020','01/02/2020','01/02/2020']})

我将数据分组以获得给定日期内按城市、国家的条目数:

group_data = data.groupby(['state','country','Date']).size().to_frame().reset_index()

得到:

|    | state   | country   | Date       |   0 |
|---:|:-------|:----------|:-----------|----:|
|  0 | ny     | usa       | 01/01/2020 |   1 |
|  1 | ny     | usa       | 01/02/2020 |   2 |
|  2 | sf     | usa       | 01/01/2020 |   1 |
|  3 | tx     | usa       | 01/01/2020 |   1 |

理想情况下,我希望在数据框中的每一个条目,填补日期缺失的整个范围max(data[' date '])和min(data[' date '])有值填充的子组状态和国家,不存在,所以,例如,它应该看起来像:

|    | state   | country   | Date       |   0 |
|---:|:-------|:----------|:-----------|----:|
|  0 | ny     | usa       | 01/01/2020 |   1 |
|  1 | ny     | usa       | 01/02/2020 |   2 |
|  2 | sf     | usa       | 01/01/2020 |   1 |
|  2 | sf     | usa       | 01/02/2020 |   0 |
|  3 | tx     | usa       | 01/01/2020 |   1 |
|  3 | tx     | usa       | 01/02/2020 |   0 |

2020年1月2日增加sf-usa和tx-usa两个条目,编号为0.

添加unstackstack

out = data.groupby(['state','country','Date']).size().unstack(fill_value=0).stack().reset_index()
Out[276]: 
state country        Date  0
0    ny     usa  01/01/2020  1
1    ny     usa  01/02/2020  2
2    sf     usa  01/01/2020  1
3    sf     usa  01/02/2020  0
4    tx     usa  01/01/2020  1
5    tx     usa  01/02/2020  0

您还可以使用pyjanitorcomplete函数,以暴露显式缺失值;它还可以帮助存在重复的场景(这里不相关,因为groupby总是返回唯一):

# pip install pyjanitor
import pandas as pd
import janitor as jn
(data.groupby(['state', 'country', 'Date'], as_index = False)
.size()
.complete('state', 'country', 'Date')
.fillna(0)
# to preserve data as integers
.astype({'size':pd.Int64Dtype()})
)
state country        Date  size
0    ny     usa  01/01/2020   1
1    ny     usa  01/02/2020   2
2    sf     usa  01/01/2020   1
3    sf     usa  01/02/2020   0
4    tx     usa  01/01/2020   1
5    tx     usa  01/02/2020   0

相关内容

  • 没有找到相关文章

最新更新