在Pyspark dataframe中按groupby后的计数、求和进行过滤

文章展示了如何在PySpark中对dataframe进行操作,包括根据name列分组并计算每组的数量,然后使用filter函数筛选出计数小于3的记录。此外,还提到了可以对多个列进行groupby操作,并通过SQL查询获取数据,进一步筛选重复次数超过50的行,最后提取出重复的t值。

有一个像这样的pyspark 

data = [("1", "a"), ("2", "a"), ("3", "b"), ("4", "a")]
df = spark.createDataFrame(data).toDF(*("id", "name"))
df.show()
+---+----+
| id|name|
+---+----+
|  1|   a|
|  2|   a|
|  3|   b|
|  4|   a|
+---+----+

按这个dataframe的名称列分组 

df.groupBy("name").count().show()
+----+-----+
|name|count|
+----+-----+
|   a|    3|
|   b|    1|
+----+-----+

from pyspark.sql import functions as F

data = [("1", "a"), ("2", "a"), ("3", "b"), ("4", "a")]
df = spark.createDataFrame(data).toDF(*("id", "name"))
df.groupBy("name").count().where(F.col('count') < 3).show()

F是函数的别名,您可以使用任何需要的标识符,但它通常写为Ffunc,这只是个人习惯。

result:

+----+-----+
|name|count|
+----+-----+
|   b|    1|
+----+-----+
# 可以多个列名同时使用groupby
duplicates_df = sc.sql(hive_read).groupBy("t", "g").count()

# 筛选出重复次数大于50的行
duplicates_df = duplicates_df.filter(duplicates_df["count"] > 50)

# 按照 count 列进行降序排序
sorted_duplicates_df = duplicates_df.orderBy(duplicates_df["count"].desc())

# 提取所有重复的t值,即满足上述重复条件的,发生过重复情况的t值
duplicate_tids = duplicates_df.select("t","g").distinct()

### 如何在 Python Pandas DataFrame 中根据相同项筛选并求和 为了实现基于特定条件的分组求和,在 `pandas` 库中可以利用 `groupby()` 函数配合聚合函数如 `sum()` 来完成此操作。以下是具体方法: #### 使用 groupby 和 sum 进行分组求和 假设有一个包含成绩 (`score`)、类别 (`type`) 及数量 (`count`) 的字典形式的数据集。 ```python import pandas as pd data = { "score": {0: 9.397, 1: 9.397, 2: 9.397995, 3: 9.397996, 4: 9.3999}, "type": {"0": "advanced", "1": "advanced", "2": "advanced", "3": "newbie", "4": "expert"}, "count": { 0: 394.18930604, 1: 143.14226729, 2: 9.64172783, 3: 0.1, 4: 19.65413734, }, } df = pd.DataFrame(data) # 对 'type' 列进行分组并对 'count' 列求和 result = df.groupby('type')['count'].sum().reset_index() print(result) ``` 这段代码创建了一个名为 `df` 的 DataFrame,并通过调用 `groupby()` 方法按照 `'type'` 列中的不同值来划分数据,接着对每一组内的 `'count'` 列执行求和运算[^3]。 对于更复杂的情况,比如想要同时计算多个字段上的统计量或是应用其他类型的聚合逻辑,则可以通过传递一个字典给 `.agg()` 方法来自定义每列对应的聚合方式。 #### 复杂情况下的多列聚合 如果希望在同一查询里处理更多维度的信息,例如不仅限于单一数值型列的汇总,还可以考虑如下做法: ```python # 对 'type' 分组后分别对 'score' 和 'count' 计算平均数与总和 complex_result = ( df.groupby("type") .agg( score_mean=("score", "mean"), count_sum=("count", "sum"), ) .reset_index() ) print(complex_result) ``` 上述例子展示了如何在一个语句内针对不同的列指定各自的聚合规则——这里是对分数取均值而对计数做累加。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值