python pandas:按行对条件进行分组 - python

我有一个大的pandas数据框,试图从中形成一些行的对。

我的df如下所示:

object_id increment location event
        0         1        d     A
        0         2        d     B
        0         3        z     C
        0         4        g     A
        0         5        g     B
        0         6        i     C
        1         1        k     A
        1         2        k     B
      ...       ...      ...  ...

对象ID描述特定的对象。
增量是每次发生某事(跟踪订单)时都会增加的值,位置是此事发生的位置。最后一列是事件的类型。

现在,我想将这些分组为有时(但不是总是),当A发生在某个位置,B发生在那之后,然后C是完全不同的事件,可以忽略。但是,我只想将位置相同,对象ID相同以及事件紧挨着列出时将它们归为一组(因此,增量仅相差1)。

现在的问题是,对于同一对象,这些事件和增量编号有时会从零开始。因此,我只希望将它们在数据帧中彼此准确定位时进行分组(因此组最多应包含两个条目)。我很难做到这一点,因为在groupby函数中没有比较行的选项。

任何提示我应该尝试什么方向?

编辑:
我正在寻找的输出正在形成以下形式的组:

group_id object_id increment location event
       0         0         1        d     A
       0         0         2        d     B
       1         0         3        z     C
       2         0         4        g     A
       2         0         5        g     B
       3         0         6        i     C
       4         1         1        k     A
       4         1         2        k     B
     ...       ...       ...      ...   ...

因此,仅当该对的“第一个”条目具有事件A和某个增量值x,而“第二个”条目具有事件B和增量值x + 1并因此是同一序列的一部分时,才形成组。希望这可以澄清我的问题!

参考方案

您的问题并不十分清楚,因此在此问题中,您可能需要处理if语句中的条件,但这可能会对您有所帮助。

数据框设置:

import pandas as pd
d = {'object_id': [0,0,0,0], 'increment': [1,2,3,4],
     'location': ['d', 'd', 'z', 'g'], 'event': ['A', 'B', 'C', 'A']}
df = pd.DataFrame(data=d)

让我们做一个列表来保存位置相同的索引。此外,您应该以适合您的方式添加条件,但您的问题尚不清楚。从那里可以运行以下功能:

lst = []
def functionGrouping(dataset):
    for i in range(len(df)-1):
        if df['event'].iloc[i+1] == 'C':
            i = i + 1
        else:
            if df['location'].iloc[i+1] == df['location'].iloc[i] and df['object_id'].iloc[i+1] == df['object_id'].iloc[i]:
                df['increment'].iloc[i+1] = df['increment'].iloc[i+1]  + df['increment'].iloc[i] 
                lst.append([i])

functionGrouping(df)

然后从那里放下您在函数中汇总的行。

for i in range(len(lst)):
    df=df.drop(df.index[i])

我希望这可以有所帮助,但是您的问题并不清楚。对于将来的问题,请简化您的问题,并提供所需输出的示例。

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…

pandas DataFrame:根据另一列中的布尔值计算总和 - python

我对Python相当陌生,我尝试在pandas中模拟以下逻辑我目前正在循环抛出行,并希望对前几行的AMOUNT列中的值求和,但只求和最后一次看到的“ TRUE”值。实际数据似乎效率低下(我的数据框大约有500万行)?想知道用Python处理这种逻辑的有效方法是什么?逻辑:逻辑是,如果FLAG为TRUE,我想对前几行的AMOUNT列中的值求和,但只求和最后一次…

Python:如何根据另一列元素明智地查找一列中的空单元格计数? - python

df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice','Jane', 'Alice','Bob', 'Alice'], 'income…

如何将熊猫数据框合并到现有的reportlab表中? - python

example_df = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]] 我想将example_df pandas数据框集成到现有的Reportlab表中-行数正在变化(如示例中所示,可以是3,也可以是20):rlab_table(['Mean','Max','Min',…

重命名默认ID python - python

我想连接两个dataFrames,但是两个数据具有不同的ID,所以结果是错误的这是我的代码data=pd.DataFrame(df.columns) data1=data.drop(axis=1,index=[0,1,2,3]).transpose() data1 这是dataframe1另一个数据框:y=sma_algo(df.loc['H+L&…