【问题标题】:Re index pivot table index in sequential order?按顺序重新索引数据透视表索引?
【发布时间】:2020-04-17 00:53:53
【问题描述】:

这里编辑是数据框的局部视图

     Day        Forecast     Temperatures  City
0   Tonight     Partly Cloudy   46         DC
1   Thursday    Mostly Cloudy   44         DC
2   Tonight     Mostly Sunny    71         Mia
3   Thursday    Partly Sunny    73         Mia

我在我的数据框上使用了一个数据透视表,并按升序对其进行排序。

 weather.pivot_table(index=['Day'], values='Temperatures',columns = 'City', aggfunc='mean')

结果

 City     Mia   DC

 Day        
Friday    72    51
Saturday  74    50
Sunday    67    55
Thursday  73    44
Tonight   71    46

你如何按照(今晚、星期四、星期五、星期六、星期日)的顺序重新索引数据透视表索引“天”

  City    Mia   DC

 Day
Tonight   71    46  
Thursday  73    44  
Friday    72    51
Saturday  74    50
Sunday    67    55

【问题讨论】:

    标签: python pandas matplotlib pivot-table


    【解决方案1】:

    试试这个,如果你有这样的风景,我会添加更多数据:

    import pandas as pd
    from io import StringIO
    data = """
    Day,Forecast,Temperatures,City
    Tonight,Partly Cloudy,46,DC
    Thursday, Mostly Cloudy,44,DC
    Tonight,Mostly Sunny,71,Mia
    Thursday,Partly Sunny,73,Mia
    Friday,Partly Sunny,12,Mia
    Friday,Partly Sunny,12,CA
    """
    df = pd.read_csv(StringIO(data),sep=',')
    print(df.pivot_table(index=['Day'], values='Temperatures',columns = 'City', aggfunc='mean').reindex(['Tonight', 'Monday','Tuesday','Wednesday','Thursday','Friday']).fillna(0))
    

    结果:

    City       CA  DC Mia
    Day                  
    Tonight        46  71
    Monday               
    Tuesday              
    Wednesday            
    Thursday       44  73
    Friday     12      12
    

    【讨论】:

    • 您明白在输入空字符串后您的数据不再是数字了吗?尝试x.mean()x.sum() 或任何其他算术运算。
    • 只需在 fillna() 中将 ' ' 替换为 0
    • 我已经告诉过你输入 0 有什么问题:它们可能与真实数据无法区分。您应该了解 NaN 的用途。
    【解决方案2】:

    实际上是通过重新索引:

    df = weather.pivot_table(index=['Day'], ...)
    new_index = ['Tonight', 'Thursday', 'Friday', 'Saturday', 'Sunday']
    df.reindex(new_index)
    

    附:我撤回了放弃 NaN 的建议。它们在这里是有原因的,应该保留以供进一步处理。

    【讨论】:

    • 我试过了,它给了我 NAN 值。我在上面添加了数据框以显示我是如何更改数据的。
    • NaN 表示没有数据的天数。您可以使用.dropna 删除它们(参见修改后的示例),或者不将它们包含在新索引中。
    • 但是如果你设置 dropna()...如果只有 1 个 NaN,你将删除所有行
    • @GiovaniSalazar 是的,我对答案进行了更改。
    • @excelater 注意在什么情况下使用 dropna
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2016-09-15
    • 2019-10-14
    • 2018-08-25
    • 2018-07-16
    相关资源
    最近更新 更多