如何解决熊猫:用 0 填充一些分类数据
我有一个带日期的数据集(这可能不是分类数据),我想按星期几(和/或按月或按年,使用相同的逻辑)计算出现次数。>
我有这样的事情,一周中的一天(法语......):
import numpy as np
import pandas as pd
# this is simulation,of course my datas are more complex ;-)
data = {'date': ["2000-01-01","2000-05-01","2000-11-11","2000-11-01"],'col_2': ['a','b','c','d']}
df = pd.DataFrame.from_dict(data)
# date conversion
df['date'] = pd.to_datetime(df['date'])
df['day_of_week'] = df['date'].dt.day_name(locale = 'fr_FR')
# group by
data = df.groupby('day_of_week')['day_of_week'].agg(['count'])
data.reset_index(level=0,inplace=True)
# order by... order of the day in the week
JOUR_SEMAINE = ["Lundi","Mardi","Mercredi","Jeudi","vendredi","Samedi","Dimanche"]
MAPPING_SEMAINE = {day: i for i,day in enumerate(JOUR_SEMAINE)}
key = data['day_of_week'].map(MAPPING_SEMAINE)
data = data.iloc[key.argsort()]
# see
data
. | day_of_week | 计数 |
---|---|---|
0 | 隆迪 | 1 |
1 | Mercredi | 1 |
2 | 萨梅迪 | 2 |
这很好,但我如何用 0 填充缺席天数,以获得此:
. | day_of_week | 计数 |
---|---|---|
0 | 隆迪 | 1 |
1 | 狂欢 | 0 |
3 | Mercredi | 1 |
4 | 绝地 | 0 |
5 | vendredi | 0 |
6 | 萨梅迪 | 2 |
7 | 迪曼奇 | 0 |
为了更通用,我正在搜索更自动的方法,为我的分类数组(在本例中为 JOUR_SEMAINE)的每个索引都有一个值,计算值(计数)或 0 ...
有人知道吗?
提前致谢
解决方法
首先,我将创建分类数据框。我们可以使用日历库获取工作日名称。
import pandas as pd
import calendar as cal
weekdays = [wd for wd in cal.day_name]
weekday_count_df = pd.DataFrame(index=weekdays)
weekday_count_df
接下来,我们将您的数据放入数据框中。
data = {'date': ["2000-01-01","2000-05-01","2000-11-11","2000-11-01"],'col_2': ['a','b','c','d']}
data_df = pd.DataFrame(data)
data_df['date'] = pd.to_datetime(data_df['date'])
data_df['day_of_week'] = data_df['date'].dt.day_name()
data_df
接下来,我们可以连接两个数据框。
data_group_df = data_df.groupby('day_of_week')['date'].count()
weekday_count_df = weekday_count_df.join(data_group_df)
weekday_count_df = weekday_count_df.fillna(0)
weekday_count_df
最后,我们可以修复列类型和名称。
weekday_count_df = weekday_count_df.rename(columns={'date':'count'})
weekday_count_df['count'] = weekday_count_df['count'].astype('int32')
weekday_count_df
最终结果是这样的:
count
Monday 1
Tuesday 0
Wednesday 1
Thursday 0
Friday 0
Saturday 2
Sunday 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。