什么是Pythonic/pandas在pandas中对列中的“levels”进行排序的方式,以便在bar plot中给出酒吧的特定顺序。
例如,给定:
import pandas as pd
df = pd.DataFrame({
'group': ['a', 'a', 'a', 'a', 'a', 'a', 'a',
'b', 'b', 'b', 'b', 'b', 'b', 'b'],
'day': ['Mon', 'Tues', 'Fri', 'Thurs', 'Sat', 'Sun', 'Weds',
'Fri', 'Sun', 'Thurs', 'Sat', 'Weds', 'Mon', 'Tues'],
'amount': [1, 2, 4, 2, 1, 1, 2, 4, 5, 3, 4, 2, 1, 3]})
dfx = df.groupby(['group'])
dfx.plot(kind='bar', x='day')
我可以生成以下两个图:
条形图的顺序遵循行顺序。
什么是对数据重新排序的最佳方式,以便柱状图在周一到周日有柱状图排序?
更新:这个垃圾解决方案很管用,但它使用额外的排序列的方式远不够优雅:
df2 = pd.DataFrame({
'day': ['Mon', 'Tues', 'Weds', 'Thurs', 'Fri', 'Sat', 'Sun'],
'num': [0, 1, 2, 3, 4, 5, 6]})
df = pd.merge(df, df2, on='day')
df = df.sort_values('num')
dfx = df.groupby(['group'])
dfx.plot(kind='bar', x='day')
进一步概括:
是否有一个解决方案也可以确定“闪避”条形图中条形图的顺序:
df.pivot('day', 'group', 'amount').plot(kind='bar')
我将提供下面的代码来扩展Dan的答案,以解决OP问题的“进一步概括”部分。首先,一个简单情况(只有一个变量)的完整示例,基于Dan的解决方案:
现在,我们使用相同的排序技术对数据透视表的行(而不是groupby创建的行)进行排序。
结果如下:
我知道这个回复已经很晚了,但是如果不使用字典/映射,对这两种情况给出一个简单的解决方案,就像我在下面发布的一样。
将“day”设置为索引使您能够使用.loc按特定顺序选择数据
1)对于两个单独的地块
2)对于带有闪避图的轴示例:
请注意,pivot导致day已经在索引中,因此您可以再次使用此处的.loc。
编辑:在这些解决方案中使用.loc而不是.ix是最佳实践,.ix将被弃用,当列名和索引是数字时,可能会产生奇怪的结果。
您必须提供一个映射来指定如何排列日名称。(如果它们作为适当的日期存储,则有其他方法可以做到这一点。)
更新:
造钥匙。你可以显式地写一本字典,或者用一些聪明的方法,比如听写理解法。
分类很简单:
相关问题 更多 >
编程相关推荐