gpt4 book ai didi

python - 如何获取 Pandas 表中所有命名类别的最大值

转载 作者:行者123 更新时间:2023-12-05 08:24:44 25 4
gpt4 key购买 nike

假设我有这样的数据:

  name  time
0 A 1
1 A 2
2 B 3
3 A 6
4 A 7
5 A 3
6 B 1
7 B 4

每个条目都有一个命名类别和一些其他信息。在上面的例子中,让我们花点时间。这是我唯一关心的。

我想生成一个表,其中只有单独的唯一 name 类别和每个类别的最大值。我可以这样做:

max_table = pd.DataFrame(
{
"name": data.name.unique(),
"max_val": [
data[data["name"] == name].time.max() for name in data.name.unique()
],
}
)

但这感觉不太像 Pandas 。我必须在列表之间往返于 pandas 表并进行一些数组扩展才能完成这项工作。 有没有办法只用 pandas 类型的调用来做到这一点?

包含数据创建的完整示例:

    data = pd.DataFrame(
{
"name": pd.Categorical(["A", "A", "B", "A", "A", "A", "B", "B"]),
"time": [1, 2, 3, 6, 7, 3, 1, 4],
}
)
print(data)
print("======================")

max_table = pd.DataFrame(
{
"name": data.name.unique(),
"max_val": [
data[data["name"] == name].time.max() for name in data.name.unique()
],
}
)
print(max_table)

最佳答案

了解PandasNumpy 的第一件事是向量化 操作(如Matlab 处理数据与矩阵/数组)。它可以一次处理多项数据,而不是 for 循环操作。




groupby() 将数据聚类成组,max() 找到每个组的最大值。

output = df.groupby('name').max()
output
###
time
name
A 7
B 4

剩下的部分只是重建表(DataFrame)结构。

(如你所见,name低于time,这意味着name被设置为表(DataFrame)的索引, time 是表的列名)

output = output.reset_index().rename(columns={'time':'max_time'})
output
###
name max_time
0 A 7
1 B 4

关于python - 如何获取 Pandas 表中所有命名类别的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73230588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com