TL基を表す既存パンダのデータフレームに結果を変換goupby追加; DRは - 私はデータフレームIがグループを有するよう各行は
()DataFrameGroupBy.stdとしての機能の動作を模倣します。私は(例えば、これらのグループの平均値とstdとして)
を、各グループを代表する1行を取り、次いで得られたデータフレームに、これらのグループに関する追加の統計情報を追加したい は、ここで私が何を意味するかの例です:
df = pandas.DataFrame({"Amount": [numpy.nan,0,numpy.nan,0,0,100,200,50,0,numpy.nan,numpy.nan,100,200,100,0],
"Id": [0,1,1,1,1,2,2,2,2,2,2,2,2,2,2],
"Date": pandas.to_datetime(["2011-11-02","NA","2011-11-03","2011-11-04",
"2011-11-05","NA","2011-11-04","2011-11-04",
"2011-11-06","2011-11-06","2011-11-06","2011-11-06",
"2011-11-08","2011-11-08","2011-11-08"],errors='coerce')})
g = df.groupby("Id")
f = g.first()
f["std"] = g.Amount.std()
さて、これは動作します - しかし、のは、私は0を無視する特別なSTDを、したいとしましょう、と一度だけ、それぞれ固有の値について:
def get_unique_std(group):
vals = group.unique()
vals = vals[vals>0]
return vals.std() if vals.shape[0] > 1 else 0
私が使用している場合
f["std"] = g.Amount.transform(get_unique_std)
私は(またなど最大などの他の機能のための)ゼロ...
を取得しかし、私はこのようにそれを行う場合:のみ、
std = g.Amount.transform(get_unique_std)
私は、正しい結果を得ますもうグループ化されていない...私はグループの表す行を取る前に、私は(この場合のDFで)、元データフレームの列にこれらのすべてを計算することができますね。
df["std"] = g.Amount.transform(get_unique_std)
# regroup again the modified df
g = df.groupby("Id")
f = g.first()
しかし、それは無駄になります私の同じグループに対応する多くの行が同じ値を取得するので、dfを2回グループ化する必要があります。これらの統計を計算するために1回、表現する行を取得するために2回目にしてください...
So最初に述べたように、私はDataFrameGroupBy.std()の動作をどのように模倣できるのだろうかと思います。
g.Amount.agg(get_unique_std)
あなたはまた、辞書を渡すことができ、列などの各キーを取得: