根据列汇总Python DF

时间:2020-01-13 09:04:16

标签: python python-3.x pandas

我有一个大数据框(大约35列),其中1列-concat_strs是数据框中8列的串联。这用于检测重复项。我想做的是在列concat_strs上聚集行,其中val, abs_val, price, abs_price具有相同的值(使用总和)。

我已完成以下操作:

agg_attributes = {'val': 'sum', 'abs_val': 'sum', 'price': 'sum', 'abs_price': 'sum'}
final_df= df.groupby('concat_strs', as_index=False).aggregate(agg_attributes)

但是,当我查看final_df时,我注意到2个问题:

  • 其他列已删除,因此我只有5列。我尝试做final_df.reindex(columns=df.columns),但是其他所有列都是NaN
  • final_df中的行数与df中的行数相同(约30万行)。但是,应该减少它(手动检查)

问题是-做错了什么,有什么改进建议吗?

2 个答案:

答案 0 :(得分:0)

您对concat_strs进行分组,因此仅保留concat_strsagg_attributes中的列,因为进行groupby操作,熊猫不知道如何处理其他列。 / p>

您可以在所有列中加上first来保持该列的第一个值(如果重复)或last等。这取决于您的需求。

也可以通过这种方式来消除重复操作,我敢打赌,您可以简单地删除所有重复项吗?

您也不需要concat_strs,因为groupby支持在要分组的列列表中的输入

答案 1 :(得分:0)

不确定我是否正确理解了这个问题。但是你可以试试看吗?

final_df = df.groupby(['concat_strs']).sum()