python - 根据自定义函数汇总数据框中的多个列

下午全部

我已经尝试解决此问题一段时间了,将不胜感激。

这是我的数据框:

Channel state       rfq_qty
A        Done       10
B        Tied Done  10
C        Done       10
C        Done       10
C        Done       10
C        Tied Done  10
B        Done       10
B        Done       10



  我想要:
  
  
  按渠道分组,然后说明
  对每个通道的rfq_qty求和
  计算状态中每个“完成”字符串的出现次数(“完成”与“绑定完成”相同,即其中包含“完成”的任何内容)
  显示通道rfq_qty占rfq_qty总数的百分比(80)
  


Channel state   rfq_qty Percentage
A         1       10    0.125
B         3       30    0.375
C         4       40    0.5



  我尝试了以下方法:


df_Done = df[
                (
                    df['state']=='Done'
                ) 
                | 
                (
                    df['state'] == 'Tied Done'
                )
            ][['Channel','state','rfq_qty']]

df_Done['Percentage_Qty']= df_Done['rfq_qty']/df_Done['rfq_qty'].sum()
df_Done['Done_Trades']= df_Done['state'].count()

display(
        df_Done[
                (df_Done['Channel'] != 0)
               ].groupby(['Channel'])['Channel','Count of Done','rfq_qty','Percentage_Qty'].sum().sort_values(['rfq_qty'], ascending=False)
       )



  可行,但看起来令人费解。有什么改善吗?

最佳答案

我认为您可以使用:


首先按isinloc进行过滤
groupby并按agg进行汇总,并包含新列名称和函数的元组
Percentage除以divsum
如果需要,最后sort_values通过rfq_qty




df_Done = df.loc[df['state'].isin(['Done', 'Tied Done']), ['Channel','state','rfq_qty']]

#if want filter all values contains Done
#df_Done = df[df['state'].str.contains('Done')]

#if necessary filter out Channel == 0
#mask = (df['Channel'] != 0) & df['state'].isin(['Done', 'Tied Done'])
#df_Done = df.loc[mask, ['Channel','state','rfq_qty']]

d = {('rfq_qty', 'sum'), ('Done_Trades','size')}
df = df_Done.groupby('Channel')['rfq_qty'].agg(d).reset_index()
df['Percentage'] = df['rfq_qty'].div(df['rfq_qty'].sum())
df = df.sort_values('rfq_qty')
print (df)
  Channel  Done_Trades  rfq_qty  Percentage
0       A            1       10       0.125
1       B            3       30       0.375
2       C            4       40       0.500

本文翻译自 https://stackoverflow.com/questions/49272452/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 python pandas dataframe group-by summary


相关文章:

python - 对加速度进行数值积分的更好方法

python - 使用测试数据库以“测试模式”运行服务器

python - 数据框列在熊猫中转置

python - 从两个2D列表中提取值并将其存储到熊猫数据框中

python - 如何删除数据框中具有较低完整性率的某些功能(Python)

python - Python数据框条件列填充

python - python转换ls -l样式日期

python - 使用大熊猫将贸易数据重新采样到OHLCV

python - 从R到Python的case_when函数

python - 试图用Python编写我自己的神经网络