2017-10-26 12 views
1

私はこの問題を何回か書き直しましたが、私は問題を解決したと思っていましたが、そうは思われません。私は現在、df1とdf2の列をループして、ある列を別の列に分割して新しいdf3の列に挿入しようとしていますが、すべてのセルがNaNであるという問題があります。次のようにforループ1つのデータフレームを別のデータフレームで分割する問題

私のコードは次のとおり

#Divide One by the Other. Set up for loop 
i = 0 
for country in df3.columns:  
    df3[country] = df1.iloc[:, [i]].div(df2.iloc[:, [i]]) 
    i += 1 

得DF3のみのNaNの完全な行列です。

私DF1は、構造は次のとおりです。

enter image description here

と構造の私のDF2:

enter image description here

そして、私のように私のDF3を作成しています:

df3 = pd.DataFrame(index = df1.index, columns=tickers.index) 

どのように見えますか?(populatio N):

enter image description here

唯一の潜在的な問題はおそらくDF3にマルチインデックスですか?彼らが分裂しない理由を見て苦労している。

+1

これを試しましたか? 'df3 [:] = df1.values/df2.values'問題は、整列していないインデックスです。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ私は同意します。それはうまくいくはずです – piRSquared

+0

@piRSquaredちょうど気づいた... df1は31列、df2は27、df3は31です。私はOPがどこからそれらの欠けている列の残りを得ることを望んでいるのか分からない。 –

答えて

1

あなたの現在のアプローチが機能しないのは、pd.Series個のオブジェクトを分割しているためです。 pandasは、分割時に自動的にインデックスの整列を試みます。ここに例があります。

df1 

5 0 
4 1 
3 2 
2 3 
1 4 
dtype: int64 

df2 

5 0 
6 1 
7 2 
8 3 
9 4 
dtype: int64 

df1/df2 # you'd expect all 1's in each row, but... 

1 NaN 
2 NaN 
3 NaN 
4 NaN 
5 NaN 
6 NaN 
7 NaN 
8 NaN 
9 NaN 
dtype: float64 

あなたはdf1df2の行と列の数が同じである、とあなたがデータフレームのnp.array対応を分けるならば、これは容易になるべきであることを確認してください。

v = df1.values/df2.values 
df3 = pd.DataFrame(v, index=df1.index, columns=tickers.index) 
+0

coldspeedに感謝します。私が今日この周りに頭を抱えようとしているように、怠け者の声が聞こえることなく、2つ以上のデータフレームの間で実行できる「select from」タイプのステートメントがありますか? インデックスが同じdf1とdf2から選択してください –

+0

@CuriousStudentまあ、私はあなたがマージを探していると思います。あるいは、単に 'idx = df1.index.intersection(df2.index)'を実行し、次に 'idx'を使って両方のデータフレームを索引付けすることができます。とにかく、これらは異なる質問なので、新しい質問をする必要があります。 –

+0

@CuriousStudentとにかく、これが助けられたら、答えに投票し、満足したら了承することを忘れないでください。ありがとう –

関連する問題