【问题标题】:A neat way to create time series with categories一种使用类别创建时间序列的简洁方法
【发布时间】:2017-04-17 19:21:59
【问题描述】:

给定一个元组列表,每个元组都属于 (date-time, lang, type),其中 lang 有三个可能的值(比如 'en'、'es' 和 'ja'),而 type 有两个值:' U' 或 'R'。

我想为时间序列创建一个包含以下列的数据框: 日、语言、“U”和“R”。 也就是说,每种语言每天都会计算 lang、U 和 R。

例如,给定一个记录列表(元组):

df = pd.DataFrame.from_records(records, columns=['time','lang','type'])
df.head()

结果:

     time                  lang  type
0    2016-05-19 20:20:26    en    R
1    2016-05-19 20:20:43    ja    R
2    2016-05-19 20:26:01    ja    U
3    2016-05-19 20:30:31    en    R
4    2016-05-19 20:33:57    es    R
...

并且我想操作这个数据框(或原始记录列表)得到这样的东西:

time        lang  U    R
2016-05-19  en     4    2
            ja     1    1
            es     0    1
2016-05-20  en    10    7
            ja     1    9
            es     3   13

我正在尝试这样做

df2 = df.groupby([df['time'].dt.to_period('D'), 'lang', 'type']).count().unstack()
df2.columns = df2.columns.droplevel(0)

但是我在列中获得了一个索引,但我无法摆脱它(忽略数字)。

            type    U     R
time        lang
2016-05-19    en     4    2
              ja     1    1
              es     0    1
2016-05-20    en    10    7
              ja     1    9
              es     3   13

df2.columns

返回:索引([u'R', u'U'], dtype='object', name=u'type')

关于如何在没有多余绒毛的情况下创建所需的任何想法?

【问题讨论】:

    标签: python pandas dataframe time-series


    【解决方案1】:

    "type" 保留为列的名称。你可以这样删除它:

    df2.columns.name = None
    

    但是,我不认为您可以在同一行上放置其他 4 个标签,因为前两个标签是行上的多索引,而另外两个标签是列上的简单索引。

    【讨论】:

    • 谢谢!确实可以减少多索引。我以稍微不同的方式从记录中重建它以避免它 - 动态地将计数分组到字典中。它也更有效率。
    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多