Python 使用前一个组第一元素扣除后一个组第一元素

Python 使用前一个组第一元素扣除后一个组第一元素,python,pandas,Python,Pandas,我想知道是否有一个好的和聪明的方式使用熊猫功能基于我的上述标题 我有密码: import pandas as pd data = pd.DataFrame({'datetime': ['12:10:03.50', '12:10:02.50', '12:10:01.50', '2019/01/12 12:10:0.150', '2019/01/12 12:10:022.50', '2019/01/12 12:10:033.50'], 'number

我想知道是否有一个好的和聪明的方式使用熊猫功能基于我的上述标题

我有密码:

import pandas as pd

data = pd.DataFrame({'datetime': ['12:10:03.50', '12:10:02.50', '12:10:01.50', '2019/01/12 12:10:0.150', '2019/01/12 12:10:022.50', '2019/01/12 12:10:033.50'],
                        'number_of_people':[7, 0, 0, 1, 0, 1],
                         'group': [1, 2, 2, 3, 4, 5]})
  • 我想执行group1(第一个元素)-groupprevious(因为它没有,所以我们可以忽略)
  • 第2组(第一个元素)-前一组,即第1组(第一个元素)。例如:0-7=-7,依此类推,直到所有组都被选中并执行了操作
  • 预期产出:

    group 2 - group 1 = 0-7
    group 3 - group 2 = 1- 0
    

    谢谢。

    如果我理解正确,您希望将两个数据帧中的人数相互减去。这可以用一种非常类似蟒蛇的方式来完成。也许可以缩短,但这将是我的实现:

    import pandas as pd
    
    data = pd.DataFrame({'datetime': ['15:20:03', '1:10:02', '2:15:01', '2019/01/01 12:10:00', '2019/01/01 12:10:02', '12:10:03'], 'number_of_people':[27, 10, 40, 15, 10, 12], 'group': [19, 82, 72, 53, 24, 8]})
    previous = pd.DataFrame({'datetime': ['2019/01/01 12:10:03', '2019/01/01 12:10:02', '2019/01/01 12:10:01', '12:10:00', '12:10:02', '12:10:03'], 'number_of_people':[7, 0, 0, 1, 0, 1], 'group': [1, 2, 2, 3, 4, 5]})
    
    diff = pd.DataFrame({'number_of_people': [data['number_of_people'][i] - previous['number_of_people'][i] for i in range(len(data))]})
    
    print(diff)
    
    我想你可能也想为《泰晤士报》做同样的事情。在解释时间字符串时,有比第一眼看到的更多的东西。例如,如果您始终以HH:MM:SS格式格式化数据,那么这样做会更容易。当然,如果您创建一个单独的函数来处理不同的格式,那么您可以使用不同的时间格式。请记住,从2019/01/01 12:00:00扣除12:00:00将导致2019*365*24*60*60秒,其中预期结果(我假设)为0秒。一种方法是从时间字符串中剥离YY/mm/dd部分:

    import pandas as pd
    
    FORMAT = '%H:%M:%S'
    
    def extractTime(time_str):
        time_str = time_str.split(' ')[-1]
        return sum(x * int(t) for x, t in zip([1, 60, 3600], reversed(time_str.split(":"))))
    
    data = pd.DataFrame({'datetime': ['15:20:03', '1:10:02', '2:15:01', '2019/01/01 12:10:00', '2019/01/01 12:10:02', '12:10:03'], 'number_of_people':[27, 10, 40, 15, 10, 12], 'group': [19, 82, 72, 53, 24, 8]})
    previous = pd.DataFrame({'datetime': ['2019/01/01 12:10:03', '2019/01/01 12:10:02', '2019/01/01 12:10:01', '12:10:00', '12:10:02', '12:10:03'], 'number_of_people':[7, 0, 0, 1, 0, 1], 'group': [1, 2, 2, 3, 4, 5]})
    
    diff = pd.DataFrame({'datetime': [extractTime(data['datetime'][i]) - extractTime(previous['datetime'][i]) for i in range(len(data))]})
    
    print(diff)
    

    此处的预期输出可能会有所帮助。请显示预期输出,但定义已具有预期输出。好,我再补充一句,,