0

在我的问题中有两个文件,我想将它们组合成一个数据集两个文件。第一个文件有一个隐含的行号,在第二个文件中作为 ident 引用。所以 Janine 是 ident 1,jasmine 是 ident 2,judith 是 ident 3。

名称:

Name    Address
Janine  Unicorn Lane
Jasmine Sparkles Street
Judith  Rainbow Avenue

电话号码:

Number Ident
123    1
893    1
345    2 
746    3

如何结合这两个表来为每个地址获取电话号码?我想做的是:

data[Adress='Unicorn Lane']['Number'].mean()

好的,这个例子可能不太好。但说明了我需要什么。

4

1 回答 1

1

您可能可以使用结构化数组管理某些内容:

  • 例如namesnumbers使用您的两个文件创建两个结构化数组。np.genfromtxt不要忘记使用dtype=None(让np.genfromtxt猜测您的数据类型)和names=True(应该从第一列读取字段名称),可能使用delimiter="\t".

names会有类似的东西dtype([('Name', '|S7'), ('Adress', '|S16')]),你的类似的numbers东西dtype([('Number', '<i8'), ('Ident', '<i8')])

之后,只需花哨的索引即可获得您的选择。例如,如果您想要 for 条目的names索引"Unicorn Lane"

    (idx,) = np.nonzero(names['Adress']=="Unicorn Lane")

np.nonzero应该返回一个带有一个元素的元组,一个索引数组)。以你的例子,idx = array([0])...)

您可以将这些索引用作标识符,请记住,当您的标识符从 1 开始时,它们从 0 开始。因此,要选择与您找到numbersIdent索引匹配的索引:

numbers[numbers['Ident'] == idx+1]

(请记住,在我们的示例中,idx=array([0])对应于Ident==1...)。

You should check that idx is not empty (idx.size >0). Otherwise idx+1 will be empty too, numbers['Ident']==idx+1 will evaluate to False, and in NumPy, numbers[False] is equivalent to numbers[0].

于 2012-09-19T16:57:00.537 回答