假设我有以下熊猫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)
我想绘制它并在下图中显示结果,有人知道该怎么做吗?基本上,用“曲线”绘制“差”,其中X轴是“到期”。我不在乎图例,轴名称等。只是为了了解如何根据到期时间绘制曲线。
所需的Pyplot图
如果是否有可能知道如何在两个单独的图形中绘制曲线(即,每个单独的曲线一个图形),也很感兴趣。预先感谢,祝您有美好的一天
答案 0 :(得分:0)
您正在寻找枢纽操作。但是首先,您似乎只想过滤最后一个日期。
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
答案 1 :(得分:0)
嗨,您会得到期望的结果
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)