首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python根据特定列将多行合并为一行

使用python根据特定列将多行合并为一行
EN

Stack Overflow用户
提问于 2022-02-22 07:30:39
回答 1查看 379关注 0票数 0

我需要修改可计费和非计费利用率中的可用值,早期它的默认值现在是动态的。

我有一个可计费的列值“是”和“否”

如果值为“是”,那么它将按行向和创建新列为“可计费利用”。

代码语言:javascript
运行
复制
Billing_utilization = df[Billing_utilization] * sum/available * 100

如果值是'No‘,那么它将是按行和的,并创建了新的列,作为“不可计费的使用”。

代码语言:javascript
运行
复制
Non-Billing_utilization = df[Non-Billing_utilization] * sum/ available1 * 100

数据:

代码语言:javascript
运行
复制
| Employee Name | Java | Python | .Net | React | Billable |                                  
| Priya         | 10   |        | 5    |       | Yes      |                     
| Priya         |      | 10     |      | 5     | No       |  
| Krithi        |      | 10v    | 20   |       | No       |  

输出

Priya在可计费和不可计费两种情况下,priya名称出现在两行。我需要在一行中合并员工名。所以预期的产出应该是

代码语言:javascript
运行
复制
| Employee Name | Java | Python | .Net | React | Total | Billing     | Non-Billing |     
| Priya         | 10   | 10     | 5    | 5     | 30    | 8.928571429 | 8.928571429 |     
| Krithi        | 10   | 20     |      |       | 30    |             | 17.85714286 |
代码语言:javascript
运行
复制
df['Billable Status'] = np.where ( df['Billable Status'] == 'Billable', 'Billable Utilization','Non Billable Utilization' )

df2 = (df.groupby ( ['Employee Name', 'Billable Status'])[list_column].sum ().sum ( axis=1 ).unstack ().div (available2).mul(100)).round ( 2 ))
df = df1.join ( df2 ).reset_index ()
df.index = df.index

# Round the column value
df['Total'] = df['Total'].round ( 2 )
# df= df.round(2)
EN

回答 1

Stack Overflow用户

发布于 2022-02-22 09:06:57

尝试:

代码语言:javascript
运行
复制
cols = df.select_dtypes ( 'number' ).columns.tolist ()

df['Total'] = df.groupby('Employee Name')[cols].transform('sum').sum(1)
df['Billing'] = df.mask(df['Billable'] == 'No')[cols].sum(1) / df['Total']
df['Non-Billing'] = df.mask(df['Billable'] == 'Yes')[cols].sum(1) / df['Total']

aggfuncs = dict(zip(cols, ['sum']*len(cols)))
aggfuncs.update({'Total': 'first', 'Billing': 'sum', 'Non-Billing': 'sum'})

out = df.pivot_table(aggfuncs, 'Employee Name', aggfunc=aggfuncs, 
                     sort=False, fill_value=0)[aggfuncs].reset_index()

输出:

代码语言:javascript
运行
复制
>>> out
  Employee Name  Java  Python  .Net  React  Total  Billing  Non-Billing
0         Priya    10      10     5      5     30      0.5          0.5
1        Krithi     0      10    20      0     30      0.0          1.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71217421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档