gpt4 book ai didi

python - pandas DataFrame 的 transform 与 applymap 之间有什么区别

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:39 24 4
gpt4 key购买 nike

虽然applymap DataFrame 上的函数按元素操作,transform函数似乎实现了同样的事情,除了声称返回一个类似索引的数据帧。

问题:

  1. 是否存在其中一个有效而另一个无效的用例?
  2. 其中一个的表现是否优于另一个?
  3. 文档中描述的 like-indexed DataFrame 是什么?

最佳答案

不同的用例。比较它们时,同时显示 applyagg 很有用。

设置

np.random.seed([3,1415])
df = pd.DataFrame(np.random.randint(10, size=(6, 4)), columns=list('ABCD'))

df

A B C D
0 0 2 7 3
1 8 7 0 6
2 8 6 0 2
3 0 4 9 7
4 3 2 4 3
5 3 6 7 7

pd.DataFrame.applymap
这需要一个函数并返回一个新的数据帧,该函数的结果应用于每个单元格中的值,并用结果替换单元格的值。

df.applymap(lambda x: str(x) * x)

A B C D
0 22 7777777 333
1 88888888 7777777 666666
2 88888888 666666 22
3 4444 999999999 7777777
4 333 22 4444 333
5 333 666666 7777777 7777777

pd.DataFrame.agg
承担一项或多项职能。每个函数都应该是一个聚合函数。这意味着每个函数都应用于每一列,并且应该返回一个值来替换整列。例如 'mean''max'。两者都获取一组数据并返回一个标量。

df.agg('mean')

A 3.666667
B 4.500000
C 4.500000
D 4.666667
dtype: float64

或者

df.agg(['mean', 'std', 'first', 'min'])

A B C D
mean 3.666667 4.500000 4.500000 4.666667
std 3.614784 2.167948 3.834058 2.250926
min 0.000000 2.000000 0.000000 2.000000

pd.DataFrame.transform
接受一个预期应用于列的函数并返回大小相等的列。

df.transform(lambda x: x / x.std())

A B C D
0 0.000000 0.922531 1.825742 1.332785
1 2.213133 3.228859 0.000000 2.665570
2 2.213133 2.767594 0.000000 0.888523
3 0.000000 1.845062 2.347382 3.109832
4 0.829925 0.922531 1.043281 1.332785
5 0.829925 2.767594 1.825742 3.109832

pd.DataFrame.apply
pandas 试图弄清楚 apply 是否正在减少它正在操作的列的维数(也称为聚合),或者它是否正在将该列转换为另一个大小相同的列。当它弄清楚后,它会运行剩余的操作,就好像它是一个聚合或转换过程一样。

df.apply('mean')

A 3.666667
B 4.500000
C 4.500000
D 4.666667
dtype: float64

或者

df.apply(lambda x: (x - x.mean()) / x.std())

A B C D
0 -1.014353 -1.153164 0.652051 -0.740436
1 1.198781 1.153164 -1.173691 0.592349
2 1.198781 0.691898 -1.173691 -1.184698
3 -1.014353 -0.230633 1.173691 1.036611
4 -0.184428 -1.153164 -0.130410 -0.740436
5 -0.184428 0.691898 0.652051 1.036611

关于python - pandas DataFrame 的 transform 与 applymap 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46210678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com