2017-01-24 7 views
0

私はscipyライブラリを使用する予定の2つのリストからKendallTauの距離を計算する必要があります。1つのデータフレームをループし、別のデータフレームから値を見つけるにはどうすればよいですか?

私は同じ属性を持つそれぞれ、入力として2つのCSVファイルを持っている:

attr1, attr2,..., attrN. 

は、最初のファイルがあるとは、データを持っている:

attr1 attr2 attr3 attr4 attr5 
1  a  //some value that I don't care 
2  b  //ditto 
3  c  // 
4  d  // 

第二のファイルは、このデータ

attr1 attr2 attr3 attr4 attr5 
1  d  //some value that I don't care 
2  a  //ditto 
3  c  // 
4  b  // 
を持っています

私の目標は、2つの1D配列をKendallTauライブラリメソッドへの入力として取得することです。 私は最初の配列を[1, 2, 3, 4]とし、2番目の配列を[2, 4, 3, 1]としたい。

リストに私の問題2.

リスト1でattr2内の各要素をループであり、それは、リスト内のattr1 2.

対応のFindので[a, b, c, d]の値は、リスト1で[1, 2, 3, 4]あると[2, 4, 3, 1]どのようにループしてリストの値を見つけるのですか?別のリストからaの値を動的に調べる方法は?

+1

あなたの質問は少し曖昧です。 'attr2'で共通の値の' attr1'値を見つけることを探していますか? –

答えて

0

pandasjoin 2つのデータフレームができます。必要に応じて

data = data1.join(data2) 

、その後の列がリストに変換することができます:

values1 = list(data['attr1']) 
values2 = list(data['attr2']) 

あなたがしてデータフレームにデータを取得することができます。

data1 = pd.read_csv(filename) 

サンプルデータ使用:

data1 = pd.DataFrame([ 
    (1,  'a'), 
    (2,  'b'), 
    (3,  'c'), 
    (4,  'd'), 
], columns=('attr', 'attr1')).set_index('attr') 

data2 = pd.DataFrame([ 
    (1,  'd'), 
    (2,  'a'), 
    (3,  'c'), 
    (4,  'b'), 
], columns=('attr', 'attr2')).set_index('attr') 
0

私が正しくあなたの質問を理解していれば、単に次のようにします。

まず、2つのテーブルをマージしますが、あなたが気にしない属性をすべて捨てます。

df = data1[['attr1', 'attr2']].merge(data2[['attr1', 'attr2']], on = 'attr2', how='outer', suffixes = ['dat1', 'dat2']) 

この合併では、両方のテーブルに共通のattr2値が整列します。結果として、attr1_dat1attr1_dat2の列には、探しているリストが正確に含まれます。

あなたはまだリストにそれらをしたい場合は、単に実行します。

list1 = df.attr1_dat1.to_list() 
list2 = df.attr2_dat2.to_list() 

をあなたはあなただけのインデックスdfできるので、それは私をbefuddlesたい理由けれども。

関連する問題