如何在独特的COL2&组合中对唯一的COL1值进行分组来自CSV的COL3值

时间:2017-03-08 21:22:04

标签: python csv pandas hive itertools

寻求转换具有架构COL1 = INT,COL2 = STR,COL3 = STR的CSV表:

输入样本

INT1, S1, S2
INT1, S1, S3
INT1, S2, S3
INT2, S1, S2
INT2, S1, S3
INT2, S1, S4
INT2, S2, S3
INT2, S2, S4
INT2, S3, S4

到输出CSV /表格,其中COL2或COL3中的唯一字符串作为COL1输出,后面是它们出现的唯一COL1 INT的列表(在输出表/ CSV的COL2中)。

输出CSV /表格:

S1, [INT1, INT2]
S2, [INT1, INT2]
S3, [INT1, INT2]
S4, [INT2]

2 个答案:

答案 0 :(得分:3)

首先,您可以使用meltCOL2COL3垂直堆叠为长格式。其次,您现在可以使用groupby按熔化列进行分组,并为每个子组(S1,S2等等)获取COL1的唯一值:

# create example df
df = pd.DataFrame([["INT1", "S1", "S5"], 
                   ["INT1", "S2", "S3"],
                   ["INT2", "S1", "S2"],
                   ["INT2", "S1", "S3"]],
                  columns=["COL1", "COL2", "COL3"])
print(df)

    COL1    COL2    COL3
0   INT1    S1      S5
1   INT1    S2      S3
2   INT2    S1      S2
3   INT2    S1      S3

result =  pd.melt(df, id_vars="COL1").groupby("value")["COL1"].unique()
print(result)

S1    [INT1, INT2]
S2    [INT1, INT2]
S3    [INT1, INT2]
S5    [INT1]

答案 1 :(得分:1)

如果COL2COL3相同,您可以将两列堆叠为长格式,按值分组,并找出INT列的唯一元素{{1功能:

set