【问题标题】:Plot top 10 verse all other values绘制前 10 首诗句与所有其他值
【发布时间】:2015-03-23 19:47:18
【问题描述】:

我有一组信息,我想获取 TOP 10 值而不是其他所有值。为了详细说明,我想将所有不在前 10 名中的值加在一起,并将它们添加到一个标记为“其他”的饼图以及前 10 名中。目前我有以下代码,其中 X 是我的数据框:

temp = X.SOME_IDENTIFIER.value_counts()
temp.head(10).plot(kind='pie')

这为我提供了一个仅包含前十名的饼图,但我不希望丢弃数据框中的所有其他值。我想将它们添加为图表上的第十一个变量,但不确定如何执行此操作。感谢您提供任何帮助或建议。

【问题讨论】:

  • 你能发布一个例子或者让你想要的更清楚吗?这个“信息”是什么?它以什么格式出现?
  • 当然,让我试着解释得更好。我有一个数据框,其中一列是名称,所以它是字符串类型。这些名称中的大多数出现多次(数千次),而其他名称出现的次数则少得多。对于出现最多的十个名称,我想在饼图中将它们显示为单独的名称。对于不在前十名频率中的所有其他名称,我想将它们的出现次数组合在一起,并命名为“其他”。然后我可以在与前十名相同的条形图中绘制这个“其他组”。有点像查看前十名与其他人相比发生了多少的方法。

标签: python python-2.7 pandas


【解决方案1】:

将结果分配给一个新的数据框 (temp2),然后插入一条新记录,对列表中的所有剩余项目求和。它还标识剩余的唯一项目的数量。

temp = X.SOME_IDENTIFIER.value_counts()
temp2 = temp.head(10)
if len(temp) > 10:
    temp2['remaining {0} items'.format(len(temp) - 10)] = sum(temp[10:])
temp2.plot(kind='pie')

【讨论】:

  • 感谢 Alexander,在我告诉 pandas 将列视为字符串而不是整数之后,您的解决方案最终奏效了。感谢您的帮助。
  • 对 temp 使用以下内容,它对我有用。 temp = pd.Series(np.random.random_integers(0, 20, 50)).value_counts()
  • 小心sum(temp[10:])。如果有 NAN 值,建议的公式将导致 NAN。由于我们在这里使用 pandas,也许更好的解决方案是temp[10:].sum()
  • 如何从value_counts() 得到NaN
【解决方案2】:

使用熊猫:

# Sort the DataFrame in descending order; will create a Series
s_temp = X.SOME_IDENTIFIER.sort_values(ascending=False)

# Count how many rows are not in the top ten
not_top_ten = len(s_temp) - 10
    
# Sum the values not in the top ten
not_top_ten_sum = s_temp.tail(not_top_ten).sum()

# Get the top ten values
s_top = s_temp.head(10)

# Append the sum of not-top-ten values to the Series
s_top[10] = not_top_ten_sum

# Plot pie chart
_ = s_top.plot.pie()

# Show plot
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2014-12-08
    • 2014-04-24
    • 1970-01-01
    • 2012-06-02
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多