我正在处理以.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。 谢谢!
答案 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)])
抓取“组合”行的输出将为您提供一个元组列表,您可以将这些元组与行索引配合使用,以执行相应列的比较。