pandas.DataFrame.transform #

数据框。变换( func , axis = 0 , * args , ** kwargs ) [来源] #

调用funcself 生成一个与 self 具有相同轴形状的 DataFrame。

参数
func函数、str、类似列表或类似字典

用于转换数据的函数。如果是函数,则必须在传递 DataFrame 或传递给 DataFrame.apply 时起作用。如果 func 既像列表又像字典,则像字典的行为优先。

可接受的组合是:

  • 功能

  • 字符串函数名

  • 类似函数和/或函数名称的列表,例如[np.exp, 'sqrt']

  • 类似字典的轴标签 -> 函数、函数名称或类似列表的此类标签。

{0 或 'index', 1 或 'columns'}, 默认 0

如果 0 或“索引”:将函数应用于每一列。如果 1 或“列”:将函数应用于每一行。

*参数

要传递给func 的位置参数。

**夸格

要传递给func 的关键字参数。

返回
数据框

必须与自身长度相同的 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 对象调用转换:

>>> 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