Python 2.7 基于多个条件获取pivot中的前n条记录,并使用matplotlib进行打印

Python 2.7 基于多个条件获取pivot中的前n条记录,并使用matplotlib进行打印,python-2.7,numpy,matplotlib,pandas,pivot,Python 2.7,Numpy,Matplotlib,Pandas,Pivot,用例:扩展Pandas的枢轴功能获取前n条记录并根据其自身的“点击%”(s)与该名称记录的数量进行绘图 import pandas as pd import numpy as np df1 = pd.DataFrame({'name':['A', 'A', 'B', 'B','C','A'], 'click':[1,1,0,1,1,0]}) click name 0 1 A 1 1 A 2 0 B 3 1 B 4

用例:扩展Pandas的枢轴功能获取前n条记录并根据其自身的“点击%”(s)与该名称记录的数量进行绘图

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'name':['A', 'A', 'B', 'B','C','A'], 'click':[1,1,0,1,1,0]})
   click name
0      1    A
1      1    A
2      0    B
3      1    B
4      1    C
5      0    A

[6 rows x 2 columns]

#fraction of records present & clicks as a fraction of it's OWN records present
f=df1.pivot_table(rows='name', aggfunc=[len, np.sum])
f['len']['click']/sum(f['len']['click']) , f['sum']['click']/sum(f['sum']['click'])
(name
A       0.500000
B       0.333333
C       0.166667
Name: click, dtype: float64, name
A       0.50
B       0.25
C       0.25
Name: click, dtype: float64)
但是为了能够打印它们,需要将前n条记录存储在matplotlib支持的对象中。 我试着把它储存起来

通过创建dict(输出 f['len']['click']/sum(f['len']['click']

))-并按值排序-之后我将“click%”
[A->0.50,B->0.25,C->0.25]
也存储在同一个字典中

**这显然是一种过激的行为——想知道是否有一种更像蟒蛇的方式来做到这一点**

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'name':['A', 'A', 'B', 'B','C','A'], 'click':[1,1,0,1,1,0]})
   click name
0      1    A
1      1    A
2      0    B
3      1    B
4      1    C
5      0    A

[6 rows x 2 columns]

#fraction of records present & clicks as a fraction of it's OWN records present
f=df1.pivot_table(rows='name', aggfunc=[len, np.sum])
f['len']['click']/sum(f['len']['click']) , f['sum']['click']/sum(f['sum']['click'])
(name
A       0.500000
B       0.333333
C       0.166667
Name: click, dtype: float64, name
A       0.50
B       0.25
C       0.25
Name: click, dtype: float64)
我也试过用groupby子句来代替head,但它并没有给出我想要的东西。我正在寻找如上所述的数据帧 A 50万美元 B 0.333 C 0.166667 名称:单击,数据类型:float64,名称 A 0.50 B 0.25 C 0.25 除了应该嵌入top n逻辑(head(n)不与n一起工作取决于我的数据集-我想我需要使用“apply”?-并在此发布对象,它是一个“”对象,需要由matplotlib用自己的标签标识(此处为top n“name”)

这是我的dict函数实现:-#按照上面的自定义标准,仅获取前n名是一种过分的做法

def freq_counts(df_var,n): # df_var is like df1.name , just to make the top n logic generic for each column name
    perct_freq=dict((df_var.value_counts()*100)/len(df_var))
    vec=[]
    for key,value in perct_freq.items():
        if value>=n :
            vec.append([key,value])
    return vec
freq_counts(df1.name,3) # eg. top 3 freq counts - to get the names, see vec[i][0] which has the corresponding keys
#In this example when I calculate the "perct_freq", which is a Series object, I would ideally want to avoid converting this to a dict - What an overkill !
  • 存储实际发生的事件(名称的长度),并在总体中查找“名称”的分数
  • 与此相反,该公司还发现了“成功的结果”,并发现它只是其自身人口的一小部分
  • 最后,绘制同一绘图中的前n个名称,(1)和(2)的输出-前n的标准应基于(1)作为百分比 即,对于(1)和(2),使用支持绘图的数据框 名称作为x轴中的标签 (1) 作为y轴(主) (2) 作为y轴(辅助)
  • 缴费灵:在上述守则中— (1) is>f['len']['click']/sum(f['len']['click'])和
    (2) is>f['sum']['click']/sum(f['sum']['click'])


    在我运行“=df1.pivot_table(rows='name',aggfunc=[len,np.sum])之后,您是否尝试过(f.astype('float')/f.sum()).sort(['len',sum',升序=False)[:3]@user1827356,然后您的命令给出了“ValueError:无法按重复列len排序”。在我删除“len”后,给出了“%str(by))ValueError:无法按重复列sum排序顺便说一句,为什么我们要将“f”输入浮动。错误的原因是pandas没有很好地处理多索引列。您可以在sort-f.columns=f.columns.levels[0]2之前执行此操作。如果不将cast键入“float”,则除法返回0而不是分数(整数div)