gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:47 26 4
gpt4 key购买 nike

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

例如在这个例子中,第一行必须是从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com