绘制Pandas GroupBy的结果

Max*_*sky 39 python group-by matplotlib data-analysis pandas

我开始学习熊猫,并试图找到最多的Pythonic(或panda-thonic?)方法来完成某些任务.

假设我们有一个包含A,B和C列的DataFrame.

  • A列包含布尔值:每行的A值为true或false.
  • B列有一些我们想要绘制的重要值.

我们想要发现的是A值设置为false的行的B值与A值为真的行的B值之间的细微差别.

换句话说,如何按列A的值(true或false)进行分组,然后在同一图表上绘制B列的值?两个数据集的颜色应不同,以便能够区分这些点.


接下来,让我们为这个程序添加另一个功能:在绘图之前,我们想为每一行计算另一个值并将其存储在D列中.这个值是记录前整个五分钟存储在B中的所有数据的平均值 - 但是我们只包含存储在A中的具有相同布尔值的行.

换句话说,如果我有一行A=Truetime=t,我想计算列D的值,它是从时间t-5t具有相同的所有记录的B的平均值A=True.

在这种情况下,我们如何在A的值上执行groupby,然后将此计算应用于每个单独的组,最后绘制两个组的D值?

unu*_*tbu 43

我认为@herrfz打出了所有的高分.我只是充实细节:

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

sin = np.sin
cos = np.cos
pi = np.pi
N = 100

x = np.linspace(0, pi, N)
a = sin(x)
b = cos(x)

df = pd.DataFrame({
    'A': [True]*N + [False]*N,
    'B': np.hstack((a,b))
    })

for key, grp in df.groupby(['A']):
    plt.plot(grp['B'], label=key)
    grp['D'] = pd.rolling_mean(grp['B'], window=5)    
    plt.plot(grp['D'], label='rolling ({k})'.format(k=key))
plt.legend(loc='best')    
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述