我需要计算我打算使用KendallTau
库的两个列表的scipy
距离。
我有两个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 //
我的目标是将两个1D数组作为KendallTau
库方法的输入。
我希望我的第一个数组为[1, 2, 3, 4]
而第二个数组为[2, 4, 3, 1]
。
这是遍历列表1中attr2
中每个元素的循环,并在列表2中找到它对应的attr1
。
因此,[a, b, c, d]
的值在列表1中为[1, 2, 3, 4]
,在列表2中为[2, 4, 3, 1]
。
我的问题是我如何遍历并找到列表中的值?如何从另一个列表中动态查找a的值?
答案 0 :(得分:0)
pandas
可以join
两个数据框:
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')
答案 1 :(得分:0)
如果我理解你的问题,请执行以下操作:
首先,合并两个表,但丢弃您不关心的所有属性。
df = data1[['attr1', 'attr2']].merge(data2[['attr1', 'attr2']], on = 'attr2', how='outer', suffixes = ['dat1', 'dat2'])
此合并将对齐两个表中的常见attr2
值。因此,您将拥有包含您正在寻找的列表的attr1_dat1
和attr1_dat2
列。
如果您仍然希望他们在列表中,请执行以下操作:
list1 = df.attr1_dat1.to_list()
list2 = df.attr2_dat2.to_list()
虽然为什么你会想让我感到困惑,因为你只能索引df
。