同一の構造を持つパンダデータフレームのdictを反復処理して、各(row、col)要素の合計で1つのデータフレームを生成する最良の方法は?

piemashandgravy

私はパンダの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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ