簡體   English   中英

僅繪制大熊貓數據框中的唯一行

[英]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()

您可以從數據框中p1p2列,然后在繪制之前刪除重復項。

sub_df = df[['p1','p2']].drop_duplicates()
fig, ax = plt.subplots(1,1)
ax.plot(sub_df['p1'],sub_df['p2'])
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('exampleData.csv')

d = data[['p1', 'p2']].drop_duplicates()

plt.plot(d['p1'], d['p2'], 'o')
plt.show()

在此處輸入圖片說明

細算這個答案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.

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