我有一个数据框,它有重复的行,因为两列彼此不同。
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
答案 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)
使用groupby
与agg
和字典定义如何聚合列。
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