gpt4 book ai didi

python Pandas : group by condition on rows

转载 作者:太空宇宙 更新时间:2023-11-03 21:12:56 24 4
gpt4 key购买 nike

我有一个大的 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 描述特定对象。Increment 是每次发生某事时都会递增的值(以跟踪顺序),location 是该事件发生的位置。最后一列是事件类型。

现在,我想将这些事件分组为有时(但并非总是)当 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 Pandas : group by condition on rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54926144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com