如何将行数据转换为列而无需一次热编码

2024-05-17 08:46:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下的数据集。你知道吗

MonthDate   DayCategory
Jan-01         Federal Holiday
Jan-19         Federal Holiday
Jan-23         Event
Jan-31         Event
Feb-14         Event
Feb-16         Federal Holiday
Feb-19         Federal Holiday
Feb-22         Federal Holiday

我想要下面的清单

使用Python代码的输出列表如下所示:

    Month   FederalHoliday  Event
    Jan         2            2
    Feb         3            1

请帮我一下?你知道吗


Tags: 数据代码event列表janfebholidayfederal
3条回答

假设将日期而不是月份作为字符串,则可以使用:

pd.crosstab(df.MonthDate.dt.strftime('%b'),df.DayCategory).rename_axis(None,1)

           Event  Federal Holiday
MonthDate                        
Feb            1                3
Jan            2                2
df.pivot_table(index=df["MonthDate"].str[:3], columns="DayCategory", aggfunc="count")

对于正确的排序,需要排序的分类,对于计数,使用^{}

cats = ['Jan', 'Feb', 'Mar', 'Apr','May','Jun', 'Jul', 'Aug','Sep', 'Oct', 'Nov', 'Dec']
md = pd.to_datetime(df['MonthDate'], format='%b-%d').dt.strftime('%b')
#alternative
#md = df['MonthDate'].str.split('-').str[0]
df = pd.crosstab(pd.Categorical(md, categories=cats, ordered=True), 
                 df['DayCategory']).rename_axis('Month').reset_index()

df.columns.name = None
print (df)
  Month  Event  Federal Holiday
0   Jan      2                2
1   Feb      1                3

相关问题 更多 >