2017-01-30 10 views
0

Найдено по S.O. следующее решение для построения нескольких кадров данных:Pandas plot ТОЛЬКО перекрытие между несколькими кадрами данных

ах = df1.plot()

df2.plot (ах = ах)

Но что, если я только хочу, чтобы построить, где они пересекаться?

Скажите, что индекс df1 - это отметки времени, равные 24 часам, а индекс df2 - это отметки времени, которые составляют 12 часов в течение 24 часов df1 (но не точно такие же, как df1).

Если я хочу только построить 12 часов, которые покрывают оба фрейма данных. Каков способ облегчения этого?

ответ

1

Есть несколько способов для достижения этой цели. В приведенном ниже фрагменте кода показаны два таких способа, как пример.

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

# Make up time data for 24 hour period and 12 hour period 
times1 = pd.date_range('1/30/2016 12:00:00', '1/31/2016 12:00:00', freq='H') 
times2 = pd.date_range('1/30/2016 12:00:00', '1/31/2016 00:00:00', freq='H') 

# Put time into DataFrame 
df1 = pd.DataFrame(np.cumsum(np.random.randn(times1.size)), columns=['24 hrs'], 
        index=times1) 
df2 = pd.DataFrame(np.cumsum(np.random.randn(times2.size)), columns=['12 hrs'], 
        index=times2) 

# Method 1: Filter first dataframe according to second dataframe's time index 
fig1, ax1 = plt.subplots() 
df1.loc[times2].plot(ax=ax1) 
df2.plot(ax=ax1) 

# Method 2: Set the x limits of the axis 
fig2, ax2 = plt.subplots() 
df1.plot(ax=ax2) 
df2.plot(ax=ax2) 
ax2.set_xlim(times2.min(), times2.max()) 

enter image description here

2

Общий ответ на общий вопрос:

У вас есть три варианта:

  1. Filter both DataFrames до черчения, таким образом, что они содержат один и тот же промежуток времени.
  2. Используйте функцию xlim keyword от функции построения панд.
  3. земля как dataframes и set the axes limits later on (ax.set_xlim())
1

Чтобы построить только часть df1, чей индекс находится в пределах диапазона индекса df2, вы могли бы сделать что-то вроде этого:

топор = df1.loc [df2.index. min(): df2.index.max()]. ​​plot()

Могут быть другие способы сделать это, но это то, что происходит со мной в первую очередь.

Удачи вам!