2017-02-27 12 views
0

私はgroup_、vals_、dates_という列を持つ次の構造のデータフレームを持っています。Python - Pandas - Groupbyのカラム値の条件付きで

私はgroup_でgroupby操作を実行し、その後、各グループに対して日付の条件付きの統計を出力したいと考えています。例えば、関連付けられた日付がある日付よりも低いグループ内のすべてのvalの平均。

私は

df_.groupby(group_).agg(lambda x: x[x['date_']< some_date][vals_].mean()) 

を試みたが、これは失敗します。私はxがデータフレームではなくシリーズであるからだと信じています。これは正しいです?私がgroupbyでここで達成しようとしていることを達成することは可能でしょうか?

+0

'df_.groupby(group _).gg(lambda x:x.loc [x ['date _'] jezrael

+0

これを試す前に、xはデータフレームの代わりにすべての型のシリーズであることに気付きました。これはここに期待されていますか? – clog14

+0

うん、そうじゃなくて、 'agg'の代わりに' apply'を試してください。 – jezrael

答えて

0

あなたは違っそれを書くことができます。

def summary(sub_df): 
    bool_before = sub_df["date_"] < some_date 
    bool_after = sub_df["date_"] > some_date 

    before = sub_df.loc[bool_before, vals_].mean() 
    after = sub_df.loc[bool_after, vals_].mean() 
    overall = sub_df.loc[:, vals_].mean() 

    return pd.Series({"before": before, "after": after, "overall": overall}) 

result = df_.groupby(group_).apply(summary) 

結果は/全体的に前/後のために3の平均値を含むデータフレームです。

追加の統計情報が必要な場合は、summary関数内で統計情報を指定できます。

+0

こんにちはPansen、ありがとう。元の質問の下で議論を見ることができますか?私はこの場合には役に立たないと思います – clog14

+0

@ clog14あなたの新しい記述に私の答えを調整しました。質問の説明も更新できますか? – pansen

+0

こんにちはpansen、多くのありがとう。私はアプリケーションで試し、最終的に完全なおもちゃの例で質問を更新します。 thx clog – clog14

関連する問題