如何在不使用Onehot编码的情况下将行数据转换为列

时间:2019-02-06 15:23:02

标签: python pandas machine-learning

我有一个如下的数据集。

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

请帮助我吗?

3 个答案:

答案 0 :(得分:2)

对于正确的排序,需要排序的类别,对于计数,请使用crosstab

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

答案 1 :(得分:1)

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

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

           Event  Federal Holiday
MonthDate                        
Feb            1                3
Jan            2                2

答案 2 :(得分:0)

df.pivot_table(index=df["MonthDate"].str[:3], columns="DayCategory", aggfunc="count")