python - 根据每个组的频率添加一列

标签 python pandas group-by transform

我有一个这样的数据框:

        vehicle_id   trip
0            0        0
1            0        0
2            0        0
3            0        1
4            0        1
5            1        0
6            1        0
7            1        1
8            1        1
9            1        1
10           1        1
11           1        1
12           1        2
13           2        0
14           2        1
15           2        2

我想添加一个列来计算每个“车辆 ID”组的每个行程值的频率,并删除频率等于“一”的行。所以在添加列之后频率将是这样的:

        vehicle_id   trip  frequency
0            0        0      3
1            0        0      3
2            0        0      3
3            0        1      2
4            0        1      2
5            1        0      2
6            1        0      2
7            1        1      5
8            1        1      5
9            1        1      5
10           1        1      5
11           1        1      5
12           1        2      1
13           2        0      1
14           2        1      1
15           2        2      1

最后的结果是这样的

        vehicle_id   trip  frequency
0            0        0      3
1            0        0      3
2            0        0      3
3            0        1      2
4            0        1      2
5            1        0      2
6            1        0      2
7            1        1      5
8            1        1      5
9            1        1      5
10           1        1      5
11           1        1      5

最好的解决方案是什么?另外,如果我打算直接删除每组中频率等于1的行(不添加频率列),该怎么办?

最佳答案

在此处检查协作: https://colab.research.google.com/drive/1AuBTuW7vWj1FbJzhPuE-QoLncoF5W_7W?usp=sharing

你可以使用 df.groupby() :

df["frequency"] = df.groupby(["vehicle_id","trip"]).transform("count")

但是当然你需要在之前创建频率列:

df["frequency"] = 0

如果我以您的数据框为例,这会给出:

import pandas as pd


dict = {"vehicle_id" : [0,0,0,0,0,1,1,1,1,1,1,1],
        "trip" : [0,0,0,1,1,0,0,1,1,1,1,1]}

df = pd.DataFrame.from_dict(dict)

df["frequency"] = 0

df["frequency"] = df.groupby(["vehicle_id","trip"]).transform("count")

output :

关于python - 根据每个组的频率添加一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73655672/

相关文章:

python - 在 Python (url) 中的大量文本中模糊匹配字符串

python - 调查结果的条形图为 pd.value_counts()

python - 根据另一列 Pandas 的多个条件修改列

MySql GROUP BY 和 ORDER BY 重复数据删除

mysql - 如何在 MySQL 的 GROUP BY 语句中选择 MAX(value)

Python 正则表达式仅查找成对引号的第二个引号

python - 为什么我们需要在装饰器中包装函数?

python - 如何在 3D 绘图 (Pandas) 中指定 kmeans 簇的颜色?

python - Pandas:如何从 excel 文件中读取 DataFrame,其中多行有时由换行符 (\n) 分隔

当列中的值互换时,MySQL 对 2 列进行分组