我有一个数据集,其中包含date、shift、value等列。我想从值列中提取每个date和shift的最后一个值。例如,对于每一天,有两行,一行包含每个班次的日期时间、班次(白天或晚上)和最后一个数据点from value。
在本例中,我想提取第3行(因为7/14和Day time的最高值为3)

我只知道如何获得每一列的最大值。我尝试了几种方法来完成这项工作,但对我来说都不起作用。我是python的新手,正在寻求您的帮助。
发布于 2020-07-27 23:08:05
假设数据已经按日期排序,您可以这样做吗?或者按日期排序,然后执行此操作?
df['day'] = df['date'].apply(lambda x: x.date())
df.groupby(['day','shift'])['value'].agg(list).apply(lambda x: x[-1])这将按日期和班次对数据帧进行分组,创建每个组中的值的列表,并取最后一个值。
输出:
day shift
2020-07-14 day 3
night 5
Name: value, dtype: int64这里有一种方法可以做到这一点,但也可以抓取多个其他列...我承认它不是最干净的,可能有更好的方法,但它是有效的:
df:
date shift value value2 day
0 2020-07-14 18:58:00 day 1 9 2020-07-14
1 2020-07-14 18:59:00 day 2 8 2020-07-14
2 2020-07-14 18:59:00 day 3 7 2020-07-14
3 2020-07-14 19:00:00 night 4 6 2020-07-14
4 2020-07-14 19:00:00 night 5 5 2020-07-14
cols = ['value', 'value2']
df.groupby(['day','shift'])[cols].agg(list).apply(lambda x: [x[col][-1] for col in cols], axis=1)输出:
day shift
2020-07-14 day [3, 7]
night [5, 5]
dtype: object发布于 2020-07-27 23:17:38
如果您需要最大值而不是最后一个
import pandas
data = {"date": ["day1","day1","day1","day1","day1"],
"shift": ["Day","Day","Day","Night","Night"],
"value": [1, 2, 3, 4, 5]
}
df = pandas.DataFrame(data)
df.groupby(["date","shift"]).max()输出
value
date shift
day1 Day 3
Night 5查看pandas包、数据帧和groupby操作以获得更多帮助:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html
https://stackoverflow.com/questions/63117967
复制相似问题