首页 > 解决方案 > 如何绘制从不同列获取值的 Matplotlib 图表

问题描述

这是我的数据框

        Order  Time  Profit
0       1   106     NaN
1       1   111  -296.0
2       2    14     NaN
3       2    16  -296.0
4       3    62     NaN
..    ...   ...     ...
335   106    32  -297.6
336   107    44     NaN
337   107    44   138.0
338   108    58     NaN
339   108    63  -303.4

所以我希望它工作的方式是绘制一个图表,其中 X 是时间,Y 是绝对价格(正或负),所以我们需要有 2 个柱。现在,时间不应该来自同一行,而是来自具有相同订单号的第一行。
例如。-296.0 将在时间 106 下,而不是 111,因为 106 是 Order nr.1 下的第一个。我们将如何做这样的事情?

到目前为止,这是我的代码:

data = pd.read_csv(filename)
df = pd.DataFrame(data, columns = ['Order','Time','Profit']).astype(str)

#turns time column into hours of week
df['Time'] = df['Time'].apply(lambda x: findHourOfWeek(x))
df['Profit'] = df['Profit'].astype(float)

标签: pythonpandasmatplotlib

解决方案


如果您更想依赖数据表中的位置,您也可以这样做:

plot_df = pd.DataFrame()
plot_df["Order"] = df.Order.unique()
plot_df["Profit"] = list(df.groupby("Order").nth(-1)["Profit"])
plot_df["Time"] = list(df.groupby("Order").nth(0)["Time"])

但是,如果您想要时间的最小值,您最好使用 Arne 提供的解决方案,因为它会更安全和正确(前提是每个订单号只有一个利润值)。


推荐阅读