当前位置: 首页 > 面试题库 >

Groupby维护组之间的顺序?用哪种方法?

杜辉
2023-03-14
问题内容

在回答问题时,按月份名称对熊猫的数据框系列进行排序?我们遇到了一些奇怪的行为groupby

df = pd.DataFrame([["dec", 12], ["jan", 40], ["mar", 11], ["aug", 21], ["aug", 11], ["jan", 11], ["jan", 1]], columns=["Month", "Price"])
df["Month_dig"] = pd.to_datetime(df.Month, format='%b', errors='coerce').dt.month
df.sort_values(by="Month_dig", inplace=True)

# Now df looks like
    Month   Price   Month_dig
1   jan     40      1
5   jan     11      1
6   jan     1       1
2   mar     11      3
3   aug     21      8
4   aug     11      8
0   dec     12      12

total = (df.groupby(df['Month'])['Price'].mean())
print(total)
# output
Month
aug    16.000000
dec    12.000000
jan    17.333333
mar    11.000000
Name: Price, dtype: float64

似乎在中total,数据按字母顺序排序。当我和OP期待时

Month
jan    17.333333
mar    11.000000
aug    16.000000
dec    12.000000
Name: Price, dtype: float64

背后的机制是groupby什么?我知道它会保留文档中每个组 的顺序,但是组之间的顺序是否有规则
?在我看来,当数据df以这种方式排序时,一个非常简单的组顺序将是[“ jan”,“ mar”,“ aug”,“ dec”] 。

ps从[“ aug”,“ dec”,“ jan”,“ mar”]中看来,这些组名是按字母顺序排序的。
我正在使用Python 3.6和pandas‘0.20.3’


问题答案:

pandas.DataFrame.groupby有一个sort默认为的参数True。尝试

total = (df.groupby(df['Month'], sort=False)['Price'].mean())


 类似资料:
  • 问题内容: 我正在使用JSONObject来删除JSON字符串中不需要的certin属性: 它可以正常工作,但是问题是JSONObject是“名称/值对的无序集合”,我想保持String在通过JSONObject操作之前的原始顺序。 任何想法如何做到这一点? 问题答案: 你不能 这就是为什么我们称其 为名称/值对的无序集合 。 我不确定为什么需要这样做。但是,如果要订购,则必须使用json数组。

  • 我有一个从各种文件加载时间序列数据的应用程序。应用程序为每个文件打开一个线程以并行加载数据。文件中的记录是有序的,但我需要向应用程序的其余部分提供一个提要,以维护事件的整体顺序。 这是否可以使用像多个生产者一样的破坏者——一种消费者类型的设计来实现,以维持事件的顺序? 我目前正在使用阻塞集合和排序列表对每个阻塞集合的头部进行排序,但这会消耗大量内存,我想看看是否有其他人使用不同的体系结构实现了类似

  • 问题内容: 我在学校得到一个项目,该项目由可通过WiFi控制的遥控车组成。它可以正常工作几秒钟,但随后它会停止连接并尝试重新连接。问题是,如果我制造的汽车依赖于这种不稳定的连接,可能会导致事故。本身或一个人。 也许我做错了什么?我的问题是,我如何始终保持该连接处于活动状态?到目前为止,这是我的程序: Arduino客户端: Java服务器: 干杯! -kad 问题答案: 我解决了它,做到了这一点,

  • 我有一个异步执行的查询的输入流。我想确保当我使用时,这些要求的结果将按照输入查询流的顺序收集。 这是我的代码的样子: SQLQueryEngine。执行(查询);返回

  • 问题内容: 我有下表 然后我尝试根据主键获取记录 然后我得到以下结果 可以看到,结果按ID排序。我试图实现的结果是按照查询中提供的顺序对结果进行排序。给定这个例子,它应该返回 问题答案: 正如另一个答案所提到的:您发布的查询与您想要的结果顺序无关,而只是您想要的结果。 为了订购您的结果,我将使用ORDER BY FIELD(): FIELD的参数列表可以是可变长度。