【发布时间】:2018-12-16 21:34:59
【问题描述】:
我的数据框:
display_name security_type1 currency_str state
A GOVT USD Done
B CORP NZD Passed
B CORP USD Done
C CORP EUR Done
C CORP EUR Traded Away
C CORP GBP Done
C CORP GBP Done
C CORP USD Done
我想要的结果是:
一个。分组display_name、security_type1和currency_str
b.然后计算column state包含Done的行数并更新列Done_RFQ
c。显示每个display_name、security_type1和currency_str组合的总行数并更新列Total_RFQ
d。最后显示完成占总数的百分比,即Done_Pct = Done_RFQ / Total_RFQ
display_name security_type1 currency_str Done_RFQ Total_RFQ Done_Pct
A GOVT USD 1 1 100%
B CORP USD 1 2 50%
C CORP EUR 1 5 20%
C CORP GBP 2 5 40%
C CORP USD 1 5 20%
我的代码除了Total_RFQ 和Done_Pct 之外都可以工作
d = [('Done_RFQ', 'size')]
df_Done_Client = df[
df['state'].str.contains('Done')
][['display_name','security_type1','currency_str','state']].copy()
df_Done_Client =
df_Done_Client.groupby(['display_name','security_type1','currency_str'])['state'].agg(d).reset_index()
# Sum of all Done RFQ's per display_name
Sum_of_Done_For_Month = df_Done_Client.groupby('display_name')['Done_RFQ'].transform('sum')
df_Done_Client['Total_Done_RFQ'] = Sum_of_Done_For_Month
df_Done_Client['Done_Pct'] = df_Done_Client['Done_RFQ_For_Month'].div(Sum_of_Done_For_Month).round(5)
display(df_Done_Client)
我不清楚如何计算这个总数,因为它需要来自另一个数据框,即相同的字段但没有“完成”标准。
df_All_Client = df[['display_name','security_type1','currency_str','state']].copy()
【问题讨论】:
标签: python pandas dataframe pandas-groupby