我迫切需要一项数据分析任务,我想要在一个使用Python语言的数据帧上执行它. 这就是我所拥有的数据框架:

df = pd.DataFrame({"Person": ["P1", "P1","P1","P1","P1","P1","P1","P1","P1","P1", "P2", "P2","P2","P2","P2","P2","P2","P2","P2","P2"], 
                   "Activity": ["A", "A", "A", "B", "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "A", "A", "B", "A", "B", "A"],
                   "Time": ["0", "0", "1", "1", "1", "3", "5", "5", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6"]
                   })

我想要

  • 找出每个人连续重复活动超过2次的组数"A",并
  • 以每组的结束时间减go 开始时间除以组数来计算连续重复"A"的平均时间

即目标结果数据帧应如下所示(P1的AVGTime计算为(1-0+6-1)/2):

solution = pd.DataFrame({"Person": ["P1", "P2"],
                    "Activity": ["A", "A"],
                    "Count": [2, 1], 
                    "AVGTime": [3, 0]})

我知道这里有一个近乎接近的解决方案:https://datascience-stackexchange-com.translate.goog/questions/41428/how-to-find-the-count-of-consecutive-same-string-values-in-a-pandas-dataframe?_x_tr_sl=en&_x_tr_tl=de&_x_tr_hl=de&_x_tr_pto=sc

然而,解决方案不会聚集在一个列上,比如我这里的"Person".此外,考虑到我的数据帧大约有7MIO,该解决方案似乎执行得不太好.排好了.

如有任何提示,我将不胜感激!

推荐答案

try :

def group_func(x):
    groups = []
    for _, g in x.groupby((x["Activity"] != x["Activity"].shift()).cumsum()):
        if len(g) > 2 and g["Activity"].iat[0] == "A":
            groups.append(g)

    avgs = sum(g["Time"].max() - g["Time"].min() for g in groups) / len(groups)

    return pd.Series(
        ["A", len(groups), avgs], index=["Activity", "Count", "AVGTime"]
    )


df["Time"] = df["Time"].astype(int)
x = df.groupby("Person", as_index=False).apply(group_func)
print(x)

打印:

  Person Activity  Count  AVGTime
0     P1        A      2      3.0
1     P2        A      1      0.0

Python相关问答推荐

Python将一个列值分割成多个列,并保持其余列相同

使用SQLAlchemy从多线程Python应用程序在postgr中插入多行的最佳方法是什么?'

Polars表达式无法访问中间列创建表达式

Pandas:将值从一列移动到适当的列

在matplotlib中重叠极 map 以创建径向龙卷风图

从列表中分离数据的最佳方式

在任何要保留的字段中添加引号的文件,就像在Pandas 中一样

极点用特定值替换前n行

如何在表单中添加管理员风格的输入(PDF)

某些值的数值幂和**之间的差异

合并Pandas中的数据帧,但处理不存在的列

Python键盘模块不会立即检测到按键

更新-如何与一个我无法使用python获得的按钮进行交互-Selify?

不同 chromium 版本的selenium未检测到的 chromium 驱动器?

sklearn ridgeCV与ElasticNetCV

将Pandas 中的一组名字与其他一组带数字的名字进行匹配

如何在Python中在PDF上画一条垂直线?

从单个RBG图片开始创建12个多通道图像

修复如何使用python排序方法对列表中的元素进行排序

为什么一些地块有网格线,而另一些地块没有网格线?