我需要把这两张唱片合并成一张唱片。我有一个可计费的列值“是”和“No”
如果值为'Yes‘,那么它将按行的方式将新列相加为'Billable’。
计费= dfBilling * sum/168 * 100
如果值是'No‘,那么它将按行和,并创建新列为。
非计费=dfNon-计费* sum/ 168 * 100
数据:
|Employee Name | Java | Python | .Net | React | Billable|
|Priya | 10 | | 5 | | Yes |
|Priya | | 10 | | 5 | No |
|Krithi | | 10 | 20 | | No | 输出
Priya在可计费和不可计费两种情况下,priya名称出现在两行。我需要在一行中合并员工名。所以预期的产出应该是
| 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|预期输出可计费数据和不可计费数据应排在一行中。
但是我得到了两行输出--可计费和不可计费。
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, "")发布于 2021-04-15 07:22:22
首先按Employee Name名称聚合到df1,然后由Billable与numpy.where进行聚合,对于两列的sum、所有列的和、Series.unstack的整形、除法和最后添加到df1,以获得最终输出:
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.857143https://stackoverflow.com/questions/67103747
复制相似问题