pandas - Koalas GroupBy > 应用 > Lambda > 系列

标签 pandas pandas-groupby databricks pandas-apply spark-koalas

我正在尝试将一些代码从 Pandas 移植到 Koalas 以利用 Spark 的分布式处理。我正在获取一个数据框并将其分组到 A 和 B 上,然后应用一系列函数来填充新数据框的列。这是我在 Pandas 中使用的代码:

new = old.groupby(['A', 'B']) \
  .apply(lambda x: pd.Series({
    'v1': x['v1'].sum(),
    'v2': x['v2'].sum(),
    'v3': (x['v1'].sum() / x['v2'].sum()),
    'v4': x['v4'].min()
    })
)

我相信它运行良好,并且生成的数据框在值(value)方面似乎是正确的。

我有几个问题:

  1. 此错误是否意味着我的方法将来会被弃用? /databricks/spark/python/pyspark/sql/pandas/group_ops.py:76: UserWarning: 最好在此 API 上使用“applyInPandas”。此 API 将在未来版本中弃用。有关详细信息,请参阅 SPARK-28264。

  2. 如何将分组依据列重命名为“A”和“B”而不是 “__groupkey_0__ __groupkey_1__”?

  3. 正如您所注意到的,我不得不调用 pd.Series —— 有没有办法在 Koalas 中执行此操作?调用 ks.Series 会出现以下错误,我不确定如何实现: PandasNotImplementedError:方法 `pd.Series.__iter__()` 未实现。如果您想将数据收集为 NumPy 数组,请改用“to_numpy()”。

感谢您提供的任何帮助!

最佳答案

  1. 我不确定这个错误。我正在使用 koalas==1.2.0pandas==1.0.5 并且我没有收到错误所以我不会担心它
  2. 当我运行代码时,groupby 列已经被称为 AB。这可能又是一个错误,此后已被修补。
  3. 为此,您有 3 个选择:
    1. 继续使用 pd.Series。只要您的原始 Dataframe 是 koalas Dataframe,您的输出也将是 koalas Dataframe(pd.Series 自动转换为 ks.系列)
    2. 保持函数和数据完全相同,并使用 from_pandas 函数将最终数据帧转换为 koalas
    3. koalas 中完成所有操作。这有点棘手,因为您正在计算基于两个 GroupBy 列的聚合列,而 koalas 不支持将 lambda 函数作为有效聚合。我们可以解决这个问题的一种方法是一起计算其他聚合,然后添加多列聚合:
import databricks.koalas as ks
ks.set_option('compute.ops_on_diff_frames', True)

# Dummy data
old = ks.DataFrame({"A":[1,2,3,1,2,3], "B":[1,2,3,3,2,3], "v1":[10,20,30,40,50,60], "v2":[4,5,6,7,8,9], "v4":[0,0,1,1,2,2]})

new = old.groupby(['A', 'B']).agg({'v1':'sum', 'v2':'sum', 'v4': 'min'})
new['v3'] = old.groupby(['A', 'B']).apply(lambda x: x['v1'].sum() / x['v2'].sum())

关于pandas - Koalas GroupBy > 应用 > Lambda > 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62761435/

相关文章:

python - 如何使用 pandas 计算数据框中每个日期的值?

python-3.x - 如何使用python从pandas数据框中删除第二个连续/出现的重复行?

python - 如何使用另一个数据框中最近的日期填充一个数据框中的日期列

python - 使用 pandas 按列分组,然后根据条件创建新列

pyspark - Databricks dbutils.fs.ls 显示文件。但是,读取它们会引发 IO 错误

python - Spark : why is Decimal(36, 16) 6 位数字后四舍五入?

python - DataFrame 的转置

python - 在图例中使用 pandas.DataFrame.plot 的临时标签

amazon-web-services - 数据湖 - S3 和 Databricks

python - 如何在 Pandas 中的另一个词之前提取一个词