【问题标题】:Groupby single column and merge using PandasGroupby 单列并使用 Pandas 合并
【发布时间】:2022-01-15 16:14:18
【问题描述】:

我有一个数据框 df,我需要明智地合并部门

输入

我的输出

预期输出

【问题讨论】:

  • 在合并中参与 两个 DataFrame。您未能显示第二个 DataFrame(与您合并您的第一个 DataFrame。另一个需要更正的细节:将您的源数据(两个 DataFrame)作为 文本,而不是图片。我们既没有时间也不想从图片中重写你的源数据。并展示你到目前为止尝试过的代码。更多细节:你的输出和期望的输出有什么区别?
  • @gomathi,您是在问如何在 excel 输出中合并 cells 吗?
  • 是的@Jayvee,我想合并单元格
  • @Gomathi 您可能需要使用 openpyxl 或 xslxwriter 来完成。这个答案可能会有所帮助:stackoverflow.com/questions/61217923/…

标签: python-3.x pandas dataframe numpy


【解决方案1】:

看起来你不想要任何合并,但你想做类似的事情 “unstack” Projects 列,针对每个 DepartmentEmployee 和 添加一些派生数据。

按如下方式进行:

  1. 定义一个函数以将数字格式化为带有 2 位小数的百分比:

    def perc2(n):
        return f'{n * 100:.2f}%'
    
  2. 定义一个组处理函数:

    def grpProc(grp):
        billSum = grp.groupby('Billable').Hours.sum()
        s = grp.set_index('Projects').Hours.rename('')
        s.index.name = None
        s['Total'] = s.sum()
        s['Available'] = 168
        s['Utilization'] = perc2(s.Total/s.Available)
        s['Billable Utilization'] = perc2(billSum['Yes']  / 168)\
            if 'Yes' in billSum.index else ''
        s['Non Billable Utilization'] = perc2(billSum['No']  / 168)\
            if 'No' in billSum.index else ''
        return s
    
  3. 要生成结果,请将源 DataFrame 分组并应用 对每个组进行上述功能:

    result = df.groupby(['Department Name', 'Employee Name'], sort=False)\
        .apply(grpProc).reset_index()
    

为了测试我的代码,我提取了您的数据子集,稍作改动:

  Employee Name Department Name  Projects Billable  Hours
0           Anu           Maths  Project1      Yes  56.00
1           Anu           Maths  Project2      Yes  61.00
2           Anu           Maths  Project3      Yes  62.00
3          Bala           Maths  Project1      Yes  70.00
4          Bala           Maths  Project2      Yes  69.00
5          Bala           Maths  Project3      Yes  61.67
6          Ravi        Commerce  Project1      Yes  64.00
7          Ravi        Commerce  Project2      Yes  42.00
8          Ravi        Commerce  Project3       No  62.00

我得到的结果是:

  Department Name Employee Name  Project1  Project2  Project3   Total  Available Utilization Billable Utilization Non Billable Utilization
0           Maths           Anu      56.0      61.0     62.00  179.00      168.0     106.55%              106.55%                         
1           Maths          Bala      70.0      69.0     61.67  200.67      168.0     119.45%              119.45%                         
2        Commerce          Ravi      64.0      42.0     62.00  168.00      168.0     100.00%               63.10%                   36.90%

【讨论】:

    猜你喜欢
    • 2019-10-12
    • 2019-12-22
    • 2014-10-17
    • 2017-08-06
    • 2021-10-09
    • 1970-01-01
    • 2018-12-09
    • 2015-06-20
    • 2021-09-27
    相关资源
    最近更新 更多