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()
给予:
好的,看起来不错。唯一的问题是,我希望在打印时保持日期索引的原始顺序。在您的示例中,行重叠且索引已更改。你能帮忙吗?