maxframe.dataframe.DataFrame.mf.flatmap#

DataFrame.mf.flatmap(func: Callable, dtypes=None, raw=False, args=(), **kwargs)#

对每一行应用给定的函数,然后将结果展平。如果您的转换对每个输入行返回多个行,请使用此方法。

此函数对 DataFrame 的每一行应用一个转换,该转换可以返回零个或多个值,有效地将 Python 生成器、类列表集合和 DataFrame 展平。

参数:
  • func (Callable) -- 应用于 DataFrame 每一行的函数。它应接受一个表示行的 Series(如果 raw=True 则为数组)并返回一个值的列表或可迭代对象。

  • dtypes (Series, dict or list) -- 指定返回的 DataFrame 的数据类型。

  • raw (bool, default False) -- 确定行是以 Series 还是 numpy 数组的形式传递: * False : 将每一行作为 Series 传递给函数。 * True : 传递的函数将接收到 numpy 数组对象。

  • args (tuple) -- 传递给 func 的位置参数。

  • **kwargs -- 传递给 func 的其他关键字参数。

返回:

返回指定 dtypes 的 DataFrame。

返回类型:

DataFrame

备注

func 必须为每个输入行返回一个可迭代的值。生成的 DataFrame 的索引将根据 func 生成的输出行数重复。

示例

>>> import numpy as np
>>> import maxframe.dataframe as md
>>> df = md.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
>>> df.execute()
   A  B
0  1  4
1  2  5
2  3  6

定义一个接受一个数字并返回两个数字列表的函数:

>>> def generate_values_array(row):
...     return [row['A'] * 2, row['B'] * 3]

定义一个接受一行并返回两行两列的函数:

>>> def generate_values_in_generator(row):
...     yield [row[0] * 2, row[1] * 4]
...     yield [row[0] * 3, row[1] * 5]

这等价于以下返回一个 DataFrame 的函数:

>>> def generate_values_in_dataframe(row):
...     return pd.DataFrame([[row[0] * 2, row[1] * 4], [row[0] * 3, row[1] * 5]])

使用返回 DataFrame 的函数指定 dtypes

>>> df.mf.flatmap(generate_values_array, dtypes=pd.Series({'A': 'int'})).execute()
        A
    0   2
    0  12
    1   4
    1  15
    2   6
    2  18

指定 raw=True 以将输入行作为数组传递:

>>> df.mf.flatmap(generate_values_in_generator, dtypes={"A": "int", "B": "int"}, raw=True).execute()
       A   B
    0  2  16
    0  3  20
    1  4  20
    1  6  25
    2  6  24
    2  9  30