如何遍历一个数据帧并从另一个数据帧中查找值?

时间:2017-01-24 16:10:45

标签: python pandas dataframe

我需要计算我打算使用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的值?

2 个答案:

答案 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_dat1attr1_dat2列。

如果您仍然希望他们在列表中,请执行以下操作:

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

虽然为什么你会想让我感到困惑,因为你只能索引df