我的数据框如下:
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
本来可以按“代码”分组的,但是它的值经常重复,因此这可能不是一个选择。任何帮助或提示将不胜感激。
答案 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
然后您可以删除该系列。