Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何基于两个类别获取列的最后一个值?_Python_Dataframe_Group By_Pandas Groupby - Fatal编程技术网

在python中,如何基于两个类别获取列的最后一个值?

在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新手,正在寻求您的帮助。假设数据已经按日期排序,您可以这样做吗?或者按日期排序,然后执行

我有一个数据集,其中包含名为date、shift、value等列。我想从value列中提取每个日期和shift的最后一个值。例如,对于每天,有两行,其中一行包含每个班次值的datetime、shift(白天或晚上)和last datapoints

在本例中,我想提取第3行(因为7/14和Day time的最大值是3)


我只知道如何获得每列的最大值。我尝试了几种方法来完成这项工作,但对我无效。我是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我尝试了几分钟,但无法使其工作。。我相信有一种方法我只是不知道从我的头顶,希望它能让你开始…也许这里有什么