首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python中的特定列将多行合并为单行。

使用python中的特定列将多行合并为单行。
EN

Stack Overflow用户
提问于 2021-04-15 07:05:28
回答 1查看 662关注 0票数 2

我需要把这两张唱片合并成一张唱片。我有一个可计费的列值“”和“No

如果值为'Yes‘,那么它将按行的方式将新列相加为'Billable’。

计费= dfBilling * sum/168 * 100

如果值是'No‘,那么它将按行和,并创建新列为。

非计费=dfNon-计费* sum/ 168 * 100

数据:

代码语言:javascript
复制
|Employee Name  |    Java  |  Python  | .Net  |  React |  Billable|                                  
|Priya          |    10    |          |   5   |        |  Yes     |                     
|Priya          |          |  10      |       |     5  |  No      |  
|Krithi         |          |   10     |   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
复制
total=df.sum(axis=1)
df.insert(len(df.columns),column='Total',value=total)

x = (Billable_cal.loc[:,:].sum(axis=1)/available*100).round(2)
df["Billing"] = np.where(df["Billable"] == "Yes", x, "")
df["Non Billing"] = np.where(df["Billable"] == "No", x, "")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-15 07:22:22

首先按Employee Name名称聚合到df1,然后由Billablenumpy.where进行聚合,对于两列的sum、所有列的和、Series.unstack的整形、除法和最后添加到df1,以获得最终输出:

代码语言:javascript
复制
df1 = df.groupby('Employee Name', sort=False).sum(min_count=1)

df['Billable'] = np.where(df['Billable'] == 'Yes', 'Billing','Non-Billing')

df2 = (df.groupby(['Employee Name','Billable'])
        .sum()
        .sum(axis=1)
        .unstack()
        .div(168)
        .mul(100))

df = df1.join(df2).reset_index()
print (df)
  Employee Name  Java  Python  .Net  React   Billing  Non-Billing
0         Priya  10.0    10.0   5.0    5.0  8.928571     8.928571
1        Krithi   NaN    10.0  20.0    NaN       NaN    17.857143
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67103747

复制
相关文章

相似问题

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