在列中获取最大值

时间:2019-06-08 23:03:06

标签: python pandas

我的数据框如下:

Country Code Duration
A        1     0
A        1     1
A        1     2
A        1     3
A        2     0
A        2     1
A        1     0
A        1     1
A        1     2

我需要从“ Duration”列中获取最大值-不仅是最大值,而且是此列中每个数字序列的最大值列表。输出可能如下所示:

Country Code Duration
  A      1     3
  A      2     1
  A      1     2

本来可以按“代码”分组的,但是它的值经常重复,因此这可能不是一个选择。任何帮助或提示将不胜感激。

4 个答案:

答案 0 :(得分:2)

首先,我们创建一个掩码来标记序列。然后我们分组以创建所需的输出:

m = (~df['Code'].eq(df['Code'].shift())).cumsum()

df.groupby(m).agg({'Country':'first',
                   'Code':'first',
                   'Duration':'max'}).reset_index(drop=True)

  Country  Code  Duration
0       A     1         3
1       A     2         1
2       A     1         2

答案 1 :(得分:2)

options.Cookie.SameSite = SameSiteMode.None; idxmax创建另一个组密钥之后使用diff

cumsum

答案 2 :(得分:0)

您可能想要检查此链接,它可能是您正在寻找的答案: pandas groupby where you get the max of one column and the min of another column。它是:

result = df.groupby(['Code', 'Country']).agg({'Duration':'max'})[['Duration']].reset_index()

答案 3 :(得分:0)

问题尚不清楚。但是,假设顺序很重要,我们可以寻求解决方案。

import pandas as pd
d = pd.read_csv('data.csv')

s = d.Code
d['series'] = s.ne(s.shift()).cumsum()
print(pd.DataFrame(d.groupby(['Country','Code','series'])['Duration'].max().reset_index()))

返回:

 Country  Code  series  Duration
0       A     1       1         3
1       A     1       3         2
2       A     2       2         1

然后您可以删除该系列。