Max*_*sky 39 python group-by matplotlib data-analysis pandas
我开始学习熊猫,并试图找到最多的Pythonic(或panda-thonic?)方法来完成某些任务.
假设我们有一个包含A,B和C列的DataFrame.
我们想要发现的是A值设置为false的行的B值与A值为真的行的B值之间的细微差别.
换句话说,如何按列A的值(true或false)进行分组,然后在同一图表上绘制B列的值?两个数据集的颜色应不同,以便能够区分这些点.
接下来,让我们为这个程序添加另一个功能:在绘图之前,我们想为每一行计算另一个值并将其存储在D列中.这个值是记录前整个五分钟存储在B中的所有数据的平均值 - 但是我们只包含存储在A中的具有相同布尔值的行.
换句话说,如果我有一行A=True和time=t,我想计算列D的值,它是从时间t-5到t具有相同的所有记录的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()

| 归档时间: | 
 | 
| 查看次数: | 36913 次 | 
| 最近记录: |