微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

熊猫:用 0 填充一些分类数据

如何解决熊猫:用 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 举报,一经查实,本站将立刻删除。