为了账号安全,请及时绑定邮箱和手机立即绑定

根据Pandas分组结果计算公式并添加到最终结果集中

根据Pandas分组结果计算公式并添加到最终结果集中

慕姐8265434 2023-10-31 14:53:42
数据框:df = {'Client': ['A', 'A', 'A',                 'B', 'B', 'B', 'B','B','B','B','B',                 'C',                 'D','D','D','D','D','D','D','D','D','D','D' ],'Result': ['Covered', 'Customer Reject', 'Customer Timeout',           'Dealer Reject','Dealer Timeout','Done','Tied Covered','Tied Done','Tied Traded Away','Traded Away','No RFQ',           'No RFQ',           'Covered','Customer Reject','Customer Timeout','Dealer Reject','Dealer Timeout','Done','Tied Covered','Tied Done','Tied Traded Away','Traded Away','No RFQ']}df = pd.DataFrame.from_dict(df)print(df)   Client            Result0       A           Covered1       A   Customer Reject2       A  Customer Timeout3       B     Dealer Reject4       B    Dealer Timeout5       B              Done6       B      Tied Covered7       B         Tied Done8       B  Tied Traded Away9       B       Traded Away10      B            No RFQ11      C            No RFQ12      D           Covered13      D   Customer Reject14      D  Customer Timeout15      D     Dealer Reject16      D    Dealer Timeout17      D              Done18      D      Tied Covered19      D         Tied Done20      D  Tied Traded Away21      D       Traded Away22      D            No RFQ期望的输出:我想添加两个使用每个返回分组结果的公式。因此,将有Total一行(每个客户端的所有结果的总和),但也有两个基于从每个客户端返回的分组值之和的公式(Pct_Calc_1和):Pct_Calc_2Pct_Calc_1 = (Total_Result_Per_Client - Total_Dealer_Reject_Per_Client - Total_Dealer_Timeout_Per_Client) / (Total_Per_Client - Total_Customer_Reject_Per_Client)Pct_Calc_2 = (Total – (Covered + Tied Covered) – Customer Reject – Dealer Reject – Dealer Timeout – (Traded Away + Tied Traded Away)) / (Total – Dealer Reject – Dealer Timeout)如果需要更改原始分组来满足此额外输出,那么一切都很好。
查看完整描述

1 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

让我们做crosstab


s = pd.crosstab(df.Client,df.Result,margins=True).drop('All')

s['Cal1']=(s['All'] - s['Dealer Reject'] - s['Dealer Timeout'])/(s['All'] - s['Customer Reject'])

s = s.stack().reset_index(name='value')

s

   Client            Result  value

0       A           Covered   1.00

1       A   Customer Reject   1.00

2       A  Customer Timeout   1.00

3       A     Dealer Reject   0.00

4       A    Dealer Timeout   0.00

5       A              Done   0.00

6       A            No RFQ   0.00

7       A      Tied Covered   0.00

8       A         Tied Done   0.00

9       A  Tied Traded Away   0.00

10      A       Traded Away   0.00

11      A               All   3.00

12      A              Cal1   1.50

13      B           Covered   0.00

14      B   Customer Reject   0.00

15      B  Customer Timeout   0.00

16      B     Dealer Reject   1.00

17      B    Dealer Timeout   1.00

18      B              Done   1.00

19      B            No RFQ   1.00

20      B      Tied Covered   1.00

21      B         Tied Done   1.00

22      B  Tied Traded Away   1.00

23      B       Traded Away   1.00

24      B               All   8.00

25      B              Cal1   0.75

26      C           Covered   0.00

27      C   Customer Reject   0.00

28      C  Customer Timeout   0.00

29      C     Dealer Reject   0.00

30      C    Dealer Timeout   0.00

31      C              Done   0.00

32      C            No RFQ   1.00

33      C      Tied Covered   0.00

34      C         Tied Done   0.00

35      C  Tied Traded Away   0.00

36      C       Traded Away   0.00

37      C               All   1.00

38      C              Cal1   1.00

39      D           Covered   1.00

40      D   Customer Reject   1.00

41      D  Customer Timeout   1.00

42      D     Dealer Reject   1.00

43      D    Dealer Timeout   1.00

44      D              Done   1.00

45      D            No RFQ   1.00

46      D      Tied Covered   1.00

47      D         Tied Done   1.00

48      D  Tied Traded Away   1.00

49      D       Traded Away   1.00

50      D               All  11.00

51      D              Cal1   0.90


查看完整回答
反对 回复 2023-10-31
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信