在特定点对 DataFrame 进行切片并绘制每个切片
Slice DataFrame at specific points and plot each slice
我是编程新手,Pythone 你能帮我吗?
我有一个看起来像这样的数据框。
d = {'time': [4, 10, 15, 6, 0, 20, 40, 11, 9, 12, 11, 25],
'value': [0, 0, 0, 50, 100, 0, 0, 70, 100, 0,100, 20]}
df = pd.DataFrame(data=d)
我想在 value == 100
时对数据进行切片,然后在图中绘制所有切片。
所以我的问题是如何按照描述对数据进行切片或切割?为了绘图而保存切片的最佳结构是什么?
注意 1:值列没有我可以使用的频率,它在 0 到 100 之间变化,时间是任意的。
注意 2:我已经尝试过这个解决方案,但我得到了相同的结果 table
decreased_value = df[df['value'] <= 100][['time', 'value']].reset_index(drop=True)
How can I slice one column in a dataframe to several series based on a condition
提前致谢!
编辑:
这是处理我的第一个答案的更简单方法(感谢@aneroid 的建议)。
获取 value==100
处的索引并添加 +1
以便它们落在每个切片的底部:
indices = df.index[df['value'] == 100] + 1
然后使用numpy.split
(感谢对该方法的回答)制作数据帧列表:
df_list = np.split(df, indices)
然后在 for 循环中为每个切片绘图:
for df in df_list:
--- plot based on df here ---
详细/从头开始方法:
您可以像这样获取 value==100
的索引:
indices = df.index[df.value==100]
然后将最小和最大的索引相加,以免遗漏df的开头和结尾:
indices = indices.insert(0,0).to_list()
indices.append(df.index[-1]+1)
然后循环通过一个while循环来切割数据帧并将每个切片放入一个数据帧列表中:
i = 0
df_list = []
while i+1 < len(indices):
df_list.append(df.iloc[indices[i]:indices[i+1]])
i += 1
我已经用for loop
解决了这个问题,可以在不使用np.split
函数的情况下同时进行切片和绘图,以及维护数据结构。
感谢@k_n_c之前的回答,帮我改进了。
slices = df.index[df['score'] == 100]
slices = slices + 1
slices = np.insert(slices, 0,0, axis=0)
slices = np.append(slices,df.index[-1]+1)
prev_ind = 0
for ind in slices:
temp = df.iloc[prev_ind:ind,:]
plt.plot(temp.time, temp.score)
prev_ind = ind
plt.show()
我是编程新手,Pythone 你能帮我吗? 我有一个看起来像这样的数据框。
d = {'time': [4, 10, 15, 6, 0, 20, 40, 11, 9, 12, 11, 25],
'value': [0, 0, 0, 50, 100, 0, 0, 70, 100, 0,100, 20]}
df = pd.DataFrame(data=d)
我想在 value == 100
时对数据进行切片,然后在图中绘制所有切片。
所以我的问题是如何按照描述对数据进行切片或切割?为了绘图而保存切片的最佳结构是什么?
注意 1:值列没有我可以使用的频率,它在 0 到 100 之间变化,时间是任意的。
注意 2:我已经尝试过这个解决方案,但我得到了相同的结果 table
decreased_value = df[df['value'] <= 100][['time', 'value']].reset_index(drop=True)
How can I slice one column in a dataframe to several series based on a condition
提前致谢!
编辑:
这是处理我的第一个答案的更简单方法(感谢@aneroid 的建议)。
获取 value==100
处的索引并添加 +1
以便它们落在每个切片的底部:
indices = df.index[df['value'] == 100] + 1
然后使用numpy.split
(感谢
df_list = np.split(df, indices)
然后在 for 循环中为每个切片绘图:
for df in df_list:
--- plot based on df here ---
详细/从头开始方法:
您可以像这样获取 value==100
的索引:
indices = df.index[df.value==100]
然后将最小和最大的索引相加,以免遗漏df的开头和结尾:
indices = indices.insert(0,0).to_list()
indices.append(df.index[-1]+1)
然后循环通过一个while循环来切割数据帧并将每个切片放入一个数据帧列表中:
i = 0
df_list = []
while i+1 < len(indices):
df_list.append(df.iloc[indices[i]:indices[i+1]])
i += 1
我已经用for loop
解决了这个问题,可以在不使用np.split
函数的情况下同时进行切片和绘图,以及维护数据结构。
感谢@k_n_c之前的回答,帮我改进了。
slices = df.index[df['score'] == 100]
slices = slices + 1
slices = np.insert(slices, 0,0, axis=0)
slices = np.append(slices,df.index[-1]+1)
prev_ind = 0
for ind in slices:
temp = df.iloc[prev_ind:ind,:]
plt.plot(temp.time, temp.score)
prev_ind = ind
plt.show()