【问题标题】:Plotting Pandas Dataset绘制 Pandas 数据集
【发布时间】:2020-09-04 15:11:08
【问题描述】:

假设我有以下 Pandas df:

import pandas as pd

df = pd.DataFrame( data = {'Day': ['2020-08-30', '2020-08-30','2020-08-30','2020-08-30',
                                        '2020-08-29', '2020-08-29','2020-08-29','2020-08-29',
                                            '2020-08-28', '2020-08-28','2020-08-28','2020-08-28'],
                                'Curve': ['Brazil', 'Japan','Brazil', 'Japan','Brazil', 'Japan','Brazil', 'Japan','Brazil', 'Japan','Brazil', 'Japan'],
                                'Value': [100, 950, 200, 1000, 50, 50, 250, 1200, 20, 30, 240, 1100],
                                'Expiry': ['1Y', '1Y', '2Y','2Y','1Y','1Y','2Y','2Y', '1Y','1Y','2Y','2Y']})

df['Difference'] = df.groupby(['Curve', 'Expiry']).Value.diff(-1)

Example Dataframe

我想绘制它并让它产生下图,有人知道怎么做吗?基本上,通过“曲线”绘制“差异”,其中 X 轴是“到期”。我不关心图例、轴名等。只是为了了解如何在到期时绘制曲线。

所需的 Pyplot 图

如果有可能知道如何在两个单独的图表中绘制曲线(即每条单独的曲线对应一个图表),也很感兴趣。在此先感谢,祝您有美好的一天

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    你好,你得到了这样的结果

    df2=df[["Difference","Day","Curve"]]
    braz=df2[df2['Curve']=='Brazil']
    jap=df2[df2['Curve']=='Japan']
    
    braz=df2[df2['Curve']=='Brazil']
    jap=df2[df2['Curve']=='Japan']
    
    
    f, axes  = plt.subplots(1)
    
    axes.plot(list(range(braz.shape[0])),braz["Difference"],label="Brazil")
    axes.plot(list(range(braz.shape[0])),jap["Difference"],label="Japan")
    
    axes.legend()
    axes.set_xlabel('Difference')
    axes.set_ylabel('?')
    
    
    f.set_figheight(8)
    f.set_figwidth(8)
    

    【讨论】:

    • x 轴应该是 Expiry
    【解决方案2】:

    您正在寻找枢轴操作。但首先,您似乎只想过滤最后一个日期。

    df2 = (
        df[df.Day=='2020-08-30']
        .pivot(index='Expiry', columns='Curve', values='Difference')
    )
    print(df2)
    
    df2.plot()
    plt.show()
    

    输出

    Curve   Brazil  Japan
    Expiry
    1Y        50.0  900.0
    2Y       -50.0 -200.0
    


    更新

    您可以使用df.Day.max() 获取最后日期,您可以使用df.filter 选择要绘制的线条。

    df.sort_values('Day', ascending=False, inplace=True)
    df2 = (
        df[df.Day==df.Day.max()]
        .pivot(index='Expiry', columns='Curve', values='Difference')
    )
    
    only_columns = ['Brazil', 'North Korea']
    df2 = df2.filter(items=only_columns, axis=1)
    print(df2)
    

    输出

    Curve   Brazil
    Expiry
    1Y        50.0
    2Y       -50.0
    

    【讨论】:

    • 感谢 Richie,您的回答很有帮助。只有当您想要(您已经帮了很多忙)时,您才知道如何为每个单独的“曲线”绘制不同的图表?
    • @Pepini2341 见stackoverflow.com/q/22483588/6692898中的第二个答案
    • @Pepini2341 我认为这里的任何人都不会介意帮助进行这样的澄清,但习惯于四处搜索是件好事......我喜欢用谷歌搜索“stackoverflow.com 我的查询”到获得更好的结果...然后,如果您仍然无法找到正确的答案,请发表评论或提出新问题...很可能只是一个人找不到合适的词来表达我们的问题跨度>
    猜你喜欢
    • 2018-12-14
    • 2015-10-29
    • 1970-01-01
    • 2014-10-11
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2020-11-05
    相关资源
    最近更新 更多