pandas.DataFrame.transform#
- DataFrame.transform(func, axis=0, *args, **kwargs)[源代码][源代码]#
在自身上调用
func
生成一个与自身轴形状相同的 DataFrame。- 参数:
- 函数函数, 字符串, 类列表或类字典
用于转换数据的函数。如果是一个函数,必须在传递 DataFrame 时工作,或者在传递给 DataFrame.apply 时工作。如果 func 既像列表又像字典,则字典行为优先。
接受的组合是:
函数
字符串函数名
函数和/或函数名的列表,例如
[np.exp, 'sqrt']
类似字典的轴标签 -> 函数、函数名或类似列表的此类内容。
- 轴{0 或 ‘index’, 1 或 ‘columns’},默认 0
如果 0 或 ‘index’:对每一列应用函数。如果 1 或 ‘columns’:对每一行应用函数。
- *args
传递给 func 的位置参数。
- **kwargs
传递给 func 的关键字参数。
- 返回:
- DataFrame
一个必须与自身长度相同的 DataFrame。
- 引发:
- ValueError如果返回的 DataFrame 的长度与 self 不同。
参见
DataFrame.agg
仅执行聚合类型的操作。
DataFrame.apply
在 DataFrame 上调用函数。
备注
修改传递对象的函数可能会产生意外行为或错误,并且不受支持。更多详情请参见 使用用户定义函数 (UDF) 方法进行变异。
示例
>>> df = pd.DataFrame({'A': range(3), 'B': range(1, 4)}) >>> df A B 0 0 1 1 1 2 2 2 3 >>> df.transform(lambda x: x + 1) A B 0 1 2 1 2 3 2 3 4
即使生成的 DataFrame 必须与输入 DataFrame 的长度相同,也可以提供多个输入函数:
>>> s = pd.Series(range(3)) >>> s 0 0 1 1 2 2 dtype: int64 >>> s.transform([np.sqrt, np.exp]) sqrt exp 0 0.000000 1.000000 1 1.000000 2.718282 2 1.414214 7.389056
你可以在一个 GroupBy 对象上调用 transform 方法:
>>> df = pd.DataFrame({ ... "Date": [ ... "2015-05-08", "2015-05-07", "2015-05-06", "2015-05-05", ... "2015-05-08", "2015-05-07", "2015-05-06", "2015-05-05"], ... "Data": [5, 8, 6, 1, 50, 100, 60, 120], ... }) >>> df Date Data 0 2015-05-08 5 1 2015-05-07 8 2 2015-05-06 6 3 2015-05-05 1 4 2015-05-08 50 5 2015-05-07 100 6 2015-05-06 60 7 2015-05-05 120 >>> df.groupby('Date')['Data'].transform('sum') 0 55 1 108 2 66 3 121 4 55 5 108 6 66 7 121 Name: Data, dtype: int64
>>> df = pd.DataFrame({ ... "c": [1, 1, 1, 2, 2, 2, 2], ... "type": ["m", "n", "o", "m", "m", "n", "n"] ... }) >>> df c type 0 1 m 1 1 n 2 1 o 3 2 m 4 2 m 5 2 n 6 2 n >>> df['size'] = df.groupby('c')['type'].transform(len) >>> df c type size 0 1 m 3 1 1 n 3 2 1 o 3 3 2 m 4 4 2 m 4 5 2 n 4 6 2 n 4