私はPandas=を学び始めており、特定のタスクを実行するための最もPythonic(またはpanda-thonic?)の方法を見つけようとしています。
列A、B、およびCを持つDataFrameがあるとします。
発見したいのは、Aがfalseに設定された行のB値と、Aがtrueの行のB値との微妙な違いです。
つまり、列Aの値(trueまたはfalse)でグループ化し、同じグラフに両方のグループの列Bの値をプロットするにはどうすればよいですか? 2つのデータセットの色を変える必要がありますポイントを区別できるようにします。
次に、このプログラムに別の機能を追加しましょう。グラフ化する前に、各行の別の値を計算して列Dに保存します。この値は、レコードの5分前にBに保存されたすべてのデータの平均です。 Aに保存されている同じブール値を持つ行のみを含めます。
つまり、A=True
とtime=t
の行がある場合、t-5
からt
までのすべてのレコードのBの平均である列Dの値を計算したいA=True
。
この場合、Aの値でgroupbyを実行し、この計算を各グループに適用し、最後に2つのグループのD値をプロットするにはどうすればよいですか?
@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()