繁体   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