通过删除不同的列并聚合剩余的行来消除重复的行

时间:2018-01-03 19:29:42

标签: python pandas dataframe group-by pandas-groupby

我有一个数据框,它有重复的行,因为两列彼此不同。

df
[A]    [B]   [C]   [D]  [E]
123    X     Y     5    A
135    D     E     4    B
434    R     F     3    C
434    E     Z     5    C

在上面的示例中,列[A]应该具有唯一值,这是我确定重复行的关键。如图所示,由于[A][B]包含不同的对象,列[C]在434处显示重复。因此,列[D]从8行拆分为3和每行5,并且[E]正在重复。 (列[D]是基于对此示例不重要的其他因素的任意分割)

我的目标是删除导致重复的两列,然后汇总列[A][D][E]。有没有办法可以使用.groupby()并设置聚合非整数值的规则(对于列[E]?聚合可能不是最好的词,因为我只是采取重复的实例和把它提升到一个水平。我正在考虑列[E]设置规则,它输出第一个实例,因为它们都是不变的。

我开始考虑以下方法:df.groupby('A').agg()

示例的输出应显示:

df_agg
[A]  [D]  [E]
123  5    A
135  4    B
434  8    C

3 个答案:

答案 0 :(得分:3)

这就像groupby + agg -

一样简单
df.groupby('[A]', as_index=False).agg({'[D]' : sum, '[E]' : 'first'})

   [A]  [D] [E]
0  123    5   A
1  135    4   B
2  434    8   C

如果[A]是索引,则稍微更改groupby语法 -

df.groupby(level=0).agg({'[D]' : sum, '[E]' : 'first'})

     [D] [E]
[A]         
123    5   A
135    4   B
434    8   C

答案 1 :(得分:2)

使用groupbyagg和字典定义如何聚合列。

df.groupby('[A]').agg({'[D]':'sum','[E]':'first'}).reset_index()

输出:

   [A]  [D] [E]
0  123    5   A
1  135    4   B
2  434    8   C

答案 2 :(得分:2)

用这个:-),然后从结果中选择你需要的东西

df.groupby('[A]',as_index=False).agg(lambda x : x.head(1) if x.dtype=='object' else x.sum())
Out[275]: 
   [A] [B] [C]  [D] [E]
0  123   X   Y    5   A
1  135   D   E    4   B
2  434   R   F    8   C