2017-09-21 16 views
0

私は、2つのデータフレーム、ステーション、リザーバで分離された水力発電データを見ています。パンダデータフレームのリストに再帰的に追加

df_stations、df_reservoirs

Name Size Number   R_Name R_Size R_number 
A 20 1     W  200  2 
B 30 2     X  300  4 
C 30 3     Y  150  2 
D 35 4     Z  100 

列「番号」と、彼らは同じ番号を持っているとして、X 『のPowerStation 4に接続されている「R_numberは、両方のSAリザーバは、PowerStationの参照』。私はこれらのデータフレームを結合したいですいくつかの局が複数のリザーバを(一部は何を持っていない)を持っています。対応するデータが同じ行にある1、に、私は以下を示すためにしようとしたとして、これらのために、私は情報のリストを望む。

をdf_combined私が代わりにAPPENDを使用しようとしました。このコードは私にステーションBの数、これだけYが一致する最後の貯水池を与える(貧困層PEPのための私の謝罪)

import pandas as pd 

df_powerstations = pd.DataFrame([['A', 20,1],['B',30,2],['C',30,3],['D',35,4]], columns=['Name','Size','Number']) 
df_reservoirs = pd.DataFrame([['W', 200, 2],['X', 300, 4],['Y',150,2],['Z',100, '']], columns=['R_name', 'R_size', 'R_Number']) 

R_cols = df_reservoirs.columns.values.tolist() 
df_combined = pd.concat([df_powerstations, pd.DataFrame(columns=R_cols)]) # type: pd.DataFrame 

for ps_ind, ps_num in enumerate(df_combined['Number']): 
    for r_ind, r_ps_num in enumerate(df_reservoirs['R_Number']): 
     if ps_num == r_ps_num: 
      df_combined.loc[ps_ind, R_cols] = df_reservoirs.loc[r_ind, R_cols].copy() 

最小限の作業例を私が開発した3210

しかし、これは私にエラーも結果も与えませんでした(私はもはやそのコードを持っています)。

リストを最初に作成し、次にデータフレームを作成するのが最善の解決策でしょうか?

答えて

0

ここmerge

In [2158]: df_rg = df_reservoirs.groupby('R_Number').apply(
            lambda x: x.astype(str).agg(','.join)) 

In [2159]: df_combined = df_powerstations.merge(df_rg, left_on='Number', 
               right_index=True, 
               how='left').fillna('') 

In [2164]: df_combined 
Out[2164]: 
    Name Size Number R_name R_size R_Number 
0 A 20  1 
1 B 30  2 W,Y 200,150  2,2 
2 C 30  3 
3 D 35  4  X  300  4 

詳細

In [2161]: df_rg 
Out[2161]: 
     R_name R_size R_Number 
R_Number 
2   W,Y 200,150  2,2 
4    X  300  4 
       Z  100 
+1

'.agg(ラムダY。: '')(y.astype(STR)に参加)が使用して一つの方法だ' simplierですが、 ... – jezrael

+1

ああ、ありがとう!それが私をさらに単純化しました。 – Zero

+0

ありがとうございます!これは私の問題を解決し、私のコードをより速くしました。私はforループを使用すると、おそらく何か間違っていると言われてきました。どういうわけか、私の解決策は残っています。 – maypay

関連する問題