在python中,如何基于两个类别获取列的最后一个值?
我有一个数据集,其中包含名为date、shift、value等列。我想从value列中提取每个日期和shift的最后一个值。例如,对于每天,有两行,其中一行包含每个班次值的datetime、shift(白天或晚上)和last datapoints 在本例中,我想提取第3行(因为7/14和Day time的最大值是3)在python中,如何基于两个类别获取列的最后一个值?,python,dataframe,group-by,pandas-groupby,Python,Dataframe,Group By,Pandas Groupby,我有一个数据集,其中包含名为date、shift、value等列。我想从value列中提取每个日期和shift的最后一个值。例如,对于每天,有两行,其中一行包含每个班次值的datetime、shift(白天或晚上)和last datapoints 在本例中,我想提取第3行(因为7/14和Day time的最大值是3) 我只知道如何获得每列的最大值。我尝试了几种方法来完成这项工作,但对我无效。我是python新手,正在寻求您的帮助。假设数据已经按日期排序,您可以这样做吗?或者按日期排序,然后执行
我只知道如何获得每列的最大值。我尝试了几种方法来完成这项工作,但对我无效。我是python新手,正在寻求您的帮助。假设数据已经按日期排序,您可以这样做吗?或者按日期排序,然后执行此操作
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
day shift
2020-07-14 day [3, 7]
night [5, 5]
dtype: object
这里有一种方法可以做到这一点,但也可以抓取多个其他列。。。我承认这不是最干净的,也许有更好的方法,但它确实有效:
df:
输出:
day shift
2020-07-14 day 3
night 5
Name: value, dtype: int64
day shift
2020-07-14 day [3, 7]
night [5, 5]
dtype: object
如果你需要最大值而不是最后一个
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包、dataframe和groupby操作以获取更多帮助:这是否回答了您的问题?嗯,但是首先你需要把它转换成完整的秒数或者省略时间。非常感谢。这就是我要找的。但是我还需要这个选定行的另一列的值。例如,此数据框还有两列。如何包含此数据框的这些列?我们不能将其他值作为列获取,而不是将它们放入数组中吗?我的意思是将它们放在“value1”和“value2”下。lol我尝试了几分钟,但无法使其工作。。我相信有一种方法我只是不知道从我的头顶,希望它能让你开始…也许这里有什么