[英]Plot only unique rows from large pandas dataframe
我有一個434300行的熊貓數據框,結構如下:
x y p1 p2
1 8.0 1.23e-6 10 12
2 7.9 4.93e-6 10 12
3 7.8 7.10e-6 10 12
...
.
...
4576 8.0 8.85e-6 5 16
4577 7.9 2.95e-6 5 16
4778 7.8 3.66e-6 5 16
...
...
...
434300 ...
關鍵是對於x,y數據變化的每個塊,都有p1和p2 不變 。 請注意,常數p1,p2的這些塊的長度是變化的,因此,這不僅僅是簡單地每n行對數據進行切片的問題。
我想在圖中繪制值p1 vs p2,但只想繪制唯一點。
如果我使用以下方法繪制p1 vs p2:
In [1]: fig=plt.figure()
In [2]: ax=plt.subplot(111)
In [3]: ax.plot(df['p1'],df['p2'])
In [4]: len(ax.lines[0].get_xdata())
Out[4]: 434300
我看到matplotlib正在繪制每條預期的數據行。
最簡單的方法是僅繪制列p1和p2中的唯一點?
這是一個小型示例數據集的csv,具有我的數據集的所有重要功能。
只需刪除重復項並繪圖:
df.drop_duplicates(how='all', columns=['p1', 'p2'])[['p1', 'p2]].plot()
您可以從數據框中p1
和p2
列,然后在繪制之前刪除重復項。
sub_df = df[['p1','p2']].drop_duplicates()
fig, ax = plt.subplots(1,1)
ax.plot(sub_df['p1'],sub_df['p2'])
細算這個答案R中類似的問題(這是大熊貓dataframes是基於什么),我發現大熊貓功能pandas.Dataframe.drop_duplicates
。 如果我們如下修改我的示例代碼:
In [1]: fig=plt.figure()
In [2]: ax=plt.subplot(111)
In [3]: df.drop_duplicates(subset=['p1','p2'],inplace=True)
In [3]: ax.plot(df['p1'],df['p2'])
In [4]: len(ax.lines[0].get_xdata())
Out[4]: 15
我們看到這將df限制為僅要繪制的唯一點。 重要的一點是,您必須將子集傳遞給drop_duplicates
以便它僅使用這些列來確定重復的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.