2016-11-17 7 views
-1

USの第1列(a)とJPの第1列(d)の間の相関を計算し、 b、e)および(c、f)の値を出力します。Pandasを使用してマルチインデックスデータの特定の列間で関数を実行する方法

サンプル入力:

import pandas as pd 
columns = pd.MultiIndex.from_arrays([['US', 'US', 'US', 'JP', 'JP', 'JP'], 
            ['a', 'b', 'c', 'd', 'e', 'f']], 
            names=['cty', 'tenor']) 
hier_df = DataFrame(np.random.randn(12, 6), columns=columns) 
hier_df 

所望の出力:

a  d  0.8 
b  e  0 
c  f  0.2 
+1

あなたは私たちとあなたのサンプル入力(すなわち 'np.random.seed(0)')ので、ご希望の出力試合でシードを設定することをお勧めします。 – ayhan

+0

出力値は関係ありません。私が知る必要があるのは、それをどうやってやるかということだけです。ありがとう。 – user1883491

答えて

3

あなたはループを使用する場合は、次の2つのサブフレームを反復するためにジップを使用することができます。

data = [] 
for col1, col2 in zip(hier_df['US'], hier_df['JP']): 
    data.append((col1, col2, hier_df['US'][col1].corr(hier_df['JP'][col2]))) 
data = pd.DataFrame(data) 
data.to_csv(filename, sep='\t', index=False, header=False) # write to a tab-seperated file 


a d 0.130997264133 
b e 0.740703734042 
c f 0.033917870807 

これを行うより効率的な方法は、corrwithを使用することです。それはしかし同じになるように列名が必要です。

hier_df['US'].corrwith(hier_df['JP'].rename(columns={'d': 'a', 'e': 'b', 'f': 'c'})) 
Out: 
tenor 
a 0.130997 
b 0.740704 
c 0.033918 
dtype: float64 
+0

答えに感謝し、特に私を 'zip'に紹介しました。 – user1883491

+0

私はPandasを初めて使っています。ループの実行後にファイルとして保存するにはどうすればいいですか? – user1883491

+0

タブ区切りファイルの投稿を更新しました。 – ayhan

関連する問題