从一列数组中删除重复项

时间:2016-03-26 06:56:04

标签: python arrays pandas duplicates

我有一个关键列的系列,它按时间顺序包含日期(DateTime Index),以及一个包含数组的值列。我想保留顺序并删除出现在前一行数组中的每个行数组中的各个元素。

数据:

Created
2015-02-08    [X, Y, Z, A]
2015-02-15    [A, B]
2015-02-22    [nan]
2015-03-01    [C]
2015-03-08    [W, F, X, A]
2015-03-15    [Q]

由此,我想得到:

Created
2015-02-08    [X, Y, Z, A]
2015-02-15    [B]
2015-02-22    [nan]
2015-03-01    [C]
2015-03-08    [W, F]
2015-03-15    [Q]

2 个答案:

答案 0 :(得分:1)

最简单的方法是维护一个公共列表。对于一行中的每个元素,检查它是否已经存在于公共列表中,它不会将它添加到该特定行的公共列表和输出中,否则只是忽略它。

答案 1 :(得分:1)

您可以从Series开始apply lists,然后在第一级创建stackdrop_duplicates和最后groupby的列。 MultiIndexapply函数tolist()

df = pd.DataFrame({'created':[['X','Y','Z', 'A'], 
                              ['A','B'],
                              ['nan'],
                              ['C'],
                              ['W','F','X','A'],
                              ['Q']]},
                              index=["2015-02-08","2015-02-15","2015-02-22",
                                     "2015-03-01","2015-03-08","2015-03-15"])

print df
                created
2015-02-08  [X, Y, Z, A]
2015-02-15        [A, B]
2015-02-22         [nan]
2015-03-01           [C]
2015-03-08  [W, F, X, A]
2015-03-15           [Q]
df = df['created'].apply(pd.Series).stack().drop_duplicates()
print df
2015-02-08  0      X
            1      Y
            2      Z
            3      A
2015-02-15  1      B
2015-02-22  0    nan
2015-03-01  0      C
2015-03-08  0      W
            1      F
2015-03-15  0      Q
dtype: object

print df.groupby(level=0).apply(lambda x: x.tolist())
2015-02-08    [X, Y, Z, A]
2015-02-15             [B]
2015-02-22           [nan]
2015-03-01             [C]
2015-03-08          [W, F]
2015-03-15             [Q]
dtype: object

如果您需要DataFrame

print pd.DataFrame(df.groupby(level=0).apply(lambda x: x.tolist()), columns=['created'])
                 created
2015-02-08  [X, Y, Z, A]
2015-02-15           [B]
2015-02-22         [nan]
2015-03-01           [C]
2015-03-08        [W, F]
2015-03-15           [Q]
相关问题