簡體   English   中英

在特定點切片 DataFrame 和 plot 每個切片

[英]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時對數據進行切片,然后 plot 將所有切片放在一個數字中。 所以我的問題是如何按照描述對數據進行切片或切割? 為了 plot 保存切片的最佳結構是什么?

注意 1:值列沒有我可以使用的頻率,它從 0 到 100 不等,其中時間是任意的。

注2:我已經嘗試過這個解決方案,但我得到了同一張桌子

decreased_value = df[df['value'] <= 100][['time', 'value']].reset_index(drop=True)

如何根據條件將 dataframe 中的一列切成多個系列

提前致謝!

編輯:

這是處理我的第一個答案的一種更簡單的方法(感謝@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循環來切割dataframe並將每個切片放入數據幀列表中:

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 function 的情況下同時用於切片和 plot,以及維護數據結構。 感謝@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() 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM