2017-10-06 38 views
1

我正在寻找合并多行不同dtypes的熊猫。我有我的.groupby()参数:['ID']。当按['ID']分组时,列['A']可能重复值,或者每行的数据不同。仅需要通过.sum()汇总列['B']分组行和定义列聚合规则

input_df 

ID  A  B 
140-1 Apple  3.2 
140-1 Pear  5.0 
143-2 Plum  1.2 
143-2 Plum  2.0 

什么是由['ID']一个伟大的方式1)基团,如果重复2)的['A']显示值分组,的['A']第一值,如果分组后不能重复的,和3)之和柱['B']后进入一个新的数据帧?

output_df 

ID  A  B 
140-1 Apple  8.2 
143-2 Plum  3.2 

回答

1

您可以尝试

df.groupby('ID').agg({'A': lambda x: x.unique()[0], 'B': 'sum'}).reset_index() 

    ID  A  B 
0 140-1 Apple 8.2 
1 143-2 Plum 3.2 
+0

你的代码看起来像它会在任何其它数据帧的工作。出于某种原因,我抛出'TypeError:'系列'对象是可变的,因此它们不能被散列'在我的实际工作数据框上。 – ParalysisByAnalysis

+0

你可以试试这个吗? df.groupby('ID')。agg({'A':'first','B':'sum'})。reset_index() – Vaishali

+0

我想出了......我调用列的方式是不正确的。谢谢你的帮助! – ParalysisByAnalysis

1

尝试:

input_df.groupby('ID').apply(lambda f: pd.DataFrame({'A': f.A.head(1), 'B': f.B.sum()})).reset_index(level=0) 


#  ID  A B 
# 0 140-1 Apple 8.2 
# 2 143-2 Plum 3.2