【问题标题】:Nested dataframe in pandas熊猫中的嵌套数据框
【发布时间】:2016-07-07 21:09:51
【问题描述】:

我有一长串按月排列的状态码,比如:

stats = pd.DataFrame(
    [
         ['2016-01', 200, 'xxx.com'],
         ['2016-01', 400, 'xxx.com'],
         ['2016-01', 200, 'xxx.com'],
         ['2016-02', 200, 'xxx.com']
    ],
    columns=['day', 'status_code', 'url']
)

我想最终绘制几个折线图,每个状态代码用一行。我已经发现这个表包含正确的信息:

pivot = stats.pivot_table(index=['day', 'status_code'], aggfunc=len)

看起来像:

                        url
month   status_code     
2016-01 200            2
        400            1
2016-02 200            1

或作为图片:

所以这是我需要的一些信息。

但是:

1.) 我已经无法访问该信息。例如什么获取 2016-01 状态码为 200 的 url 数量的语法?

2.) 我将如何绘制它?我想画多条线,其中 x 轴是月份,y 轴是状态码计数。

3.) 为什么右外列命名为“url”?我的数据透视表中没有包含该网址。

【问题讨论】:

  • 每个问题 1 个问题,这太宽泛了。 1.pivot.loc[('2016-02',200)].sum()传递一个元组访问多索引并调用sum。 2. 您必须将索引转换为日期时间并使用.month 访问月份,或者将月份剥离并绘制。 3. 你用aggfunc 调用了pivot_table,它在剩余的列上这样做了,所以它重用了列名,不知道为什么这对你来说是个谜

标签: python numpy pandas matplotlib


【解决方案1】:

你可以使用crosstab():

stats = pd.DataFrame(
    [
         ['2016-01', 200, 'xxx.com'],
         ['2016-01', 400, 'xxx.com'],
         ['2016-01', 200, 'xxx.com'],
         ['2016-02', 200, 'xxx.com']
    ],
    columns=['day', 'status_code', 'url']
)

df = pd.crosstab(stats.day, stats.status_code)

df.plot()

【讨论】:

  • 太棒了。看起来交叉表的作用与pivot = stats.pivot_table(index='month', columns='status_code', values='url', aggfunc=len) 基本相同
猜你喜欢
  • 2021-02-15
  • 2017-11-28
  • 2016-11-29
  • 2023-03-23
  • 2018-04-14
  • 1970-01-01
  • 2020-07-26
  • 2019-03-18
相关资源
最近更新 更多