dfでカスタム関数を実行する必要があります。元のデータフレームとまったく同じ順序で値のベクトルを返すことができます元のdfにマージした後、新しい列だけを使用します)。Python pandas - 元のデータフレームにgroupby結果をマージする
私の関数はインデックス列と、そのリストを含む別の列にシリーズになり、単純なリストを、返却された瞬間、私は戻ってDFにその結果を組み合わせることができますどのように
下記参照??
いくつかの他の情報: 1.私の機能は、いくつかのビジネス・ロジックが含まれており、グループ内のすべてのcollsにアクセスする必要があるので、私は、私は戻り値の型としてシリーズを使用してみましたが、その後はTypeError serisを得たtransofrm 2を使用することができませんでした。名前はハッシュ可能である必要があります(私は復帰する前に、一連の名前を設定している場合でも) 3.私は、データフレームを使用しないようにしたい、その関数の結果として
import pandas as pd
import random
df=pd.DataFrame({"x":[1,1,2,1,2,2,1,3,1,2,3,2],"y":[random.random() for _ in range(12)]})
def myfun(rs,rownum=0):
if rownum >= len(rs): return []
return [rs.y] + myfun(rs,rownum+1)
q=df.groupby(df.x).apply(myfun)
結果:
x
1 [[0.199527553305, 0.652730337948], [0.19952755...
2 [[0.58150463154, 0.882898367661], [0.581504631...
3 [[0.793173748785, 0.29465803134], [0.793173748...
更新:以下のスクリプトは私が望むことをします。私は、元のレコードセット内のインデックス値を保存し、その数で更新する場合、私はそれが動作することがわかっ唯一の方法は次のとおりです。次のコードは、あなたがちょうどより簡潔に、何をし
import pandas as pd
import random
df=pd.DataFrame({"x":[1,1,2,1,2,2,1,3,1,2,3,2],"y":[random.random() for _ in range(12)]})
def myfun(rs):
def myfun_loop(rs,rownum=0,idx=[],val=[]):
if rownum >= len(rs):
return (idx,val)
return myfun_loop(rs,rownum+1,idx+[rs.index[rownum]],val+[rownum])
v=myfun_loop(rs)
return pd.DataFrame({"idx":v[0],"val":v[1]})
g=df.groupby(df.x)
q=g.apply(lambda x:pd.DataFrame(myfun(x)))
q.set_index(["idx"],inplace=True)
df["val"]=None
df.update(q)
正確に何を達成しようとしていますか?現在、あなたの関数は "単純なリスト"ではなく、同じ系列のリストを返します。 GroupByオブジェクトに適用すると、これは一連の一連のリスト( 'type(q)'、 'type(q [1])'、 'type(q [1] [0])')の出力を確認します。したがって、まず関数の出力を修正する必要があります。 –
実際の例を使って投稿を更新しましたが、実装はかなり醜いです。より良い方法がありますか? – dkone