【问题标题】:Grouping Rows and Defining Column Aggregating Rules分组行和定义列聚合规则
【发布时间】:2018-03-18 12:21:28
【问题描述】:

我希望在 pandas 中整合多行不同的 dtype。我有我的.groupby() 参数:['ID']['A'] 列在按['ID'] 分组时可能会重复值,或者每行的数据会有所不同。列['B'] 只需通过.sum() 聚合即可。

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

有什么好方法:1)按['ID']分组,2)如果在分组后重复显示['A']的值,如果在分组后不重复,['A']的第一个值,3)求和列['B']到一个新的数据框?

output_df

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

【问题讨论】:

    标签: python pandas duplicates aggregate pandas-groupby


    【解决方案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
    

    【讨论】:

    • 您的代码看起来可以在任何其他数据帧上运行。出于某种原因,我在我的实际工作数据帧上抛出了“TypeError:'Series'对象是可变的,因此它们不能被散列”。
    • 你可以试试这个吗? df.groupby('ID').agg({'A': 'first' , 'B': 'sum'}).reset_index()
    • 我想通了...我调用列的方式不正确。感谢您的帮助!
    【解决方案2】:

    试试:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多