39

私はパンダを学び始めており、特定のタスクを実行するための最もPythonic(またはパンダ-thonic?)の方法を見つけようとしています。

列A、B、およびCを持つDataFrameがあるとします。

  • 列Aにはブール値が含まれています。各行のA値はtrueまたはfalseのいずれかです。
  • 列Bには、プロットしたいいくつかの重要な値があります。

発見したいのは、Aがfalseに設定されている行のB値と、Aがtrueに設定されている行のB値の微妙な違いです。

つまり、列Aの値(trueまたはfalse)でグループ化してから、両方のグループの列Bの値を同じグラフにプロットするにはどうすればよいですか?ポイントを区別できるように、2つのデータセットの色を変える必要があります。


次に、このプログラムに別の機能を追加しましょう。グラフ化する前に、各行の別の値を計算して列Dに格納します。この値は、レコードの前の5分間全体でBに格納されたすべてのデータの平均です。 Aに格納されている同じブール値を持つ行のみを含めます。

つまり、との行がある場合、同じである時間までのすべてのレコードのBの平均である列Dの値を計算したいと思いA=Trueます。time=tt-5tA=True

この場合、Aの値に対してgroupbyを実行し、この計算を個々のグループに適用し、最後に2つのグループのD値をプロットするにはどうすればよいでしょうか。

4

1 に答える 1

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()

ここに画像の説明を入力してください

于 2013-03-17T20:52:57.310 に答える