Python 熊猫从不同列打印线忽略值

Python 熊猫从不同列打印线忽略值,python,matplotlib,plot,split,pandas,Python,Matplotlib,Plot,Split,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]

如果在熊猫数据帧中,我有两列,如下所示:

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中组的最后一个值为每组值绘制一条直线,忽略beetween中的值?

e、 g.在本例中,第一条线必须从df.high 2004-01-15到df.low 2004-01-19,第二条线必须从df.high 01-23到df.low 01-26


仅供参考除了这个示例之外,我还有比这个更大的数据帧,其中值组与NaN组交替出现,我需要保持datetime索引的顺序相同。

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

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
然后,您可以为您拥有的每个数据帧运行此函数:

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)


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

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()
给予:


好的,看起来不错。唯一的问题是,我希望在打印时保持日期索引的原始顺序。在您的示例中,行重叠且索引已更改。你能帮忙吗?