如何循环遍历一个数据框并从另一个数据框中找到值?

2024-09-28 22:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要计算我打算使用scipy库的两个列表的KendallTau距离。你知道吗

我有两个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的值?你知道吗


Tags: 文件数据列表thatvaluesome数组don
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,为什么你要这样做呢。你知道吗

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')

相关问题 更多 >