【问题标题】:Overlapping Histogram in For Loop with heapq.nlargest - Python在 For 循环中使用 heapq.nlargest 重叠直方图 - Python
【发布时间】:2018-02-01 16:31:00
【问题描述】:

目前,我创建了一个 for 循环,它循环遍历我的数组并将结果转储到 PDF 中,但是我无法将它与 heapq.nlargest 结合使用。 我想将我的直方图与 pandas 的每个数组的前 10% 得分重叠。

目前,代码是

  x = list(df1.columns.values)
fig = plt.figure(num=None, figsize=(30, 200),  dpi=80, facecolor='w', edgecolor='w')


for i in range(6):#(len(df1.ix[i])):
    val= x[i]   
    y = df1.iloc[:,i]
    yy = heapq.nlargest(len(df1.iloc[:,i])//10, df1.iloc[:,i])


    ax = fig.add_subplot(len(df1.ix[0]),3,i+1)   
    plt.hist(y, bins=np.logspace(-4, 3, 100))
    plt.hist(yy, bins=np.logspace(-4, 3, 100))

    plt.savefig('D:/All Documents/Frequency_Distribution_Scores.pdf')

当我介绍时

yy = heapq.nlargest(len(df1.iloc[:,i])*p//100, (df1.iloc[:,i]))
plt.hist(yy, bins=np.logspace(-4, 3, 100))

似乎只是在我的所有图表上绘制了第一个数组的前 10% 的值,而不是找到每个数组的前 10%。

有人指点一下吗? 干杯

【问题讨论】:

  • 请提供一个示例DataFrame。
  • 数据框是一个包含 37 列和 180 万行的文件。我不确定如何在示例中描述这一点?这就是为什么我用 x = (len(df1.ix[i])) 来表示每列名称,用 y = y = df1.iloc[:,i] 来表示每列的长度。
  • 由于您正在遍历列,您只需给我们df1.head() 几列!
  • 是的,确定 - 在范围内打印 i (len(df1.ix[0])) 让我... 1 WEIGHTED__TRANS_IN 2 WEIGHTED__TRANS_OUT 3 WEIGHTED__CASH_IN 4 WEIGHTED__CASH_OUT 5 WEIGHTED__IP_IN 这些只是前 5 列(不包括第 0 列)。谢谢

标签: python arrays pandas histogram overlapping


【解决方案1】:

解决了!

x = list(df1.columns.values)
fig = plt.figure(num=None, figsize=(30, 200),  dpi=80, facecolor='w',  edgecolor='w')


for i in range(len(df1.ix[i])):
    val= x[i]   
    y = df1.iloc[:,i]
    yy_s = np.sort(df1.iloc[:,i])[::-1]
    yy_s_trim0 = yy_s[np.where(yy_s > 0)]
    yy_10 = yy_s_trim0[0:(len(yy_s_trim0)/10)]

    ax = fig.add_subplot(len(df1.ix[0]),3,i+1)   
    plt.hist(y, bins=np.logspace(-4, 3, 100))
    plt.hist(yy_10, bins=np.logspace(-4, 3, 100))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2016-10-15
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2018-04-10
    相关资源
    最近更新 更多