私はパンダのdictd1を持っています。ここで、各値は2列(IDと重み)の100行のデータフレームです。
dictを反復処理し、データフレームごとに、行nのすべての「Weight」値を合計します。nは行を表す1〜100の値です。次に、出力を別のdict d2に書き込みます。ここで、キーは1〜100で、値は値の合計です。
d1値データフレームの例:
ID Weight
1 0.021
2 0.445
3 1.018
..
..
..
99 77.31
100 234.04
基本的に、これらのデータフレームが10000個あり、ID 1のすべての重み値を10000全体で合計し、次にID 2のすべての重み値を10000全体で合計し、以下同様にID100まで計算したいとします。
基本的にネストされたループである解決策があります。それは機能します、そしてそれはします。しかし、私は基本的なパンダ/ numpyの知識を拡大することに本当に熱心であり、これを行うためのよりPython的な方法があるかどうか疑問に思いました。
私の既存のコード:
for i in range (1,101):
tot = 0
for key, value in d1.items():
tot = tot + value.at[i,'Weight']
d2[i] = tot
どんな助けやアドバイスにも大いに感謝します!
あなたはパンダ追加機能を使うことができます:
#create a zero filled dataframe
df = pd.DataFrame(0, index=np.arange(len(df1)), columns=df1.columns)
#iterate through dict and add values to df
for value in d1.values():
df = df.add(value)
をID
介してインデックスとして設定し、df_i = df_i.set_index('ID')
それらをすべて合計して、重みのみを追加df=df.reset_index()
して最後に追加することができます。例:
df1 = pd.DataFrame([(1,2),(3,4),(5,6)], columns=['ID','Weight'])
ID Weight
0 1 2
1 3 4
2 5 6
df2 = pd.DataFrame([(10,20),(30,40),(50,60)], columns=['ID','Weight'])
ID Weight
0 10 20
1 30 40
2 50 60
df3 = pd.DataFrame([(100,200),(300,400),(500,600)], columns=['ID','Weight'])
ID Weight
0 100 200
1 300 400
2 500 600
d1 = {'df1':df1,'df2':df2,'df3':df3}
df = pd.DataFrame(0, index=np.arange(len(df1)), columns=df1.columns)
print(df)
for value in d1.values():
df = df.add(value)
df:
ID Weight
0 111 222
1 333 444
2 555 666
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加