python - Pandas 从不同的列绘制线条忽略值

标签 python matplotlib plot split pandas

如果在 pandas 数据框中我有两列,如下所示:

df.high
Out[11]: 
date
2004-01-14       NaN
2004-01-15    1.2675
2004-01-16    1.2609
2004-01-19    1.2426
2004-01-20       NaN
2004-01-21       NaN
2004-01-22       NaN
2004-01-23    1.2778
2004-01-26    1.2616  

df.low
Out[12]: 
date
2004-01-14       NaN
2004-01-15    1.2558
2004-01-16    1.2349
2004-01-19    1.2334
2004-01-20       NaN
2004-01-21       NaN
2004-01-22       NaN
2004-01-23    1.2564
2004-01-26    1.2457 

如何使用 df.high 中组的第一个值和 df.low 中组的最后一个值绘制每组值的直线,而忽略 between 中的值?

例如在此示例中,第一行必须从 df.high 2004-01-15 到 df.low 2004-01-19,第二行必须从 df.high 01-23 到 df.low 01-26

仅供引用,除了这个例子之外,我还有比这个更大的数据帧,其中值组与 NaN 组交替,并且我需要将日期时间索引保持在相同的顺序。

最佳答案

首先,您可以构建一个根据 NaN 分割 DataFrame 的函数:

def mysplit(df):
    parts = np.split(df, np.where(np.isnan(df.value))[0])
    # removing NaN entries
    parts = [part[~np.isnan(part.value)] for part in parts
              if not isinstance(part, np.ndarray)]
    # removing empty DataFrames
    parts = [part for part in parts if not part.empty]
    return parts

然后您可以为您拥有的每个 DataFrame 运行此函数:

parts1 = mysplit(df1)
#[                 date   value
#1 2004-01-15 00:00:00  1.2675
#2 2004-01-16 00:00:00  1.2609
#3 2004-01-19 00:00:00  1.2426,
#                 date   value
#7 2004-01-23 00:00:00  1.2778
#8 2004-01-26 00:00:00  1.2616]

parts2 = mysplit(df2)
#[                 date   value
#1 2004-01-15 00:00:00  1.2558
#2 2004-01-16 00:00:00  1.2349
#3 2004-01-19 00:00:00  1.2334,
#                 date   value
#7 2004-01-23 00:00:00  1.2564
#8 2004-01-26 00:00:00  1.2457]

使绘图变得容易:

import matplotlib.pyplot as plt
values = [[i.values[0,1], i.values[-1,1]] for i,j in zip(parts1, parts2)]
for value in values:
    plt.plot([0,1], value)

enter image description here


编辑:要实现您在评论中建议的内容,您可以稍微更改最后一部分:

for i,j in zip(parts1, parts2):
    plt.plot([i.index[0], j.index[-1]], [i.values[0,1], j.values[-1,1]])
plt.show()

给予:

enter image description here

关于python - Pandas 从不同的列绘制线条忽略值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389009/

相关文章:

plot - 在同一个图表上创建多个绘图?

python - 如何使用 pyWebKit 启用 cookie 支持?

python - 从 SymPy 符号定义函数

matlab - 如何自定义图例元素的位置?

python - 将 matplotlib 图像插入 Pandas 数据框中

python - 将 matplotlib imshow 裁剪到值的范围

python - Altair 中的多列/行小平面环绕

python - 如何创建键: column_name and value : unique values in column in python from a dataframe的字典

python - 在不对语句进行硬编码的情况下处理更新 where 子句中的 null

python - 如何在包安装期间测试 Python 是否从 virtualenv 运行