连接数据-Python

时间:2017-07-26 20:49:48

标签: python pandas

我正在处理以.txt文件格式化的数据,格式如下:

family1 1 0 0 2 0 2 2 0 0 0 1 0 1 1 0 0 0 0 1 NA NA 4
family1 2 0 0 2 2 1 4 0 0 0 0 0 0 0 0 0 0 0 0 NA NA 4
family1 3 0 0 2 5 1 2 0 0 0 1 1 0 1 1 1 0 0 0 NA NA 2
family2 1 0 0 2 5 2 1 1 1 1 0 0 0 0 0 0 0 0 0 NA NA 3
etc. 

其中第二列是该族的成员,其他列是与特征对应的数字。 我需要比较此数据集中列出的亲属以创建这样的输出:

family1 1 2 traitnumber traitnumber ...
family1 1 3 traitnumber traitnumber ...
family1 2 3 traitnumber traitnumber ...

其中数字是亲戚。

我使用以下方法创建了一个数据框:

import pandas as pd
data = pd.read_csv('file.txt.', sep=" ", header = None)
print(data)

您能否提供有关将此数据连接到所需行的最有效方法的建议?我在比较思考为不同组合编写代码的方法时遇到了麻烦,即相对1和2,1和3,以及2和3。 谢谢!

2 个答案:

答案 0 :(得分:1)

您可能会发现combinations中的itertools有帮助。

from itertools import combinations
print([thing for thing in combinations((1,2,3), 2)])

产量

[(1, 2), (1, 3), (2, 3)]

答案 1 :(得分:0)

以DragonBobZ评论为基础。你可以使用数据帧的groupby函数来分割出族

import pandas as pd
data = pd.read_csv('file.txt', sep=" ", header = None)
print(data)

from itertools import combinations
grouped_df = data.groupby(0)

for key, item in grouped_df:
    print key
    current_subgroup = grouped_df.get_group(key)
    print current_subgroup
    print current_subgroup.shape, "\n"
    print([thing for thing in combinations(range(current_subgroup.shape[0]), 2)])

抓取“组合”行的输出将为您提供一个元组列表,您可以将这些元组与行索引配合使用,以执行相应列的比较。