gpt4 book ai didi

python pandas .map 双变量 lambda

转载 作者:行者123 更新时间:2023-11-30 23:32:58 29 4
gpt4 key购买 nike

我正在寻找一种使用 pandas 进行列操作(例如在 Excel 中)的方法,而无需迭代环境的每一行。我正在处理可能非常大的 pd.DataFrame 对象,并且希望尽可能使用函数。
我过去曾利用映射 lambda 函数来做类似的事情:

df['a'] = df['a'].map(lambda x: int(str(int(x))[:-1])) #remove the last digit in column 'a'

是否可以映射类似以下 lambda 函数的内容来模拟 SQL 合并函数?

lambda x,y: x if x else y

其中 x 和 y 都是列(类似于第一个示例),我想使用 lambda 生成第三个列对象。

最佳答案

听起来您正在寻找 DataFrame.apply() 方法。 apply 方法是在 DataFrame 的列或行上应用函数的非常通用的方法:

In [1]: df = DataFrame(randn(10, 3))

In [2]: df
Out[2]:
0 1 2
0 2.848 -1.536 0.234
1 -0.652 -1.169 0.101
2 0.957 -0.642 0.961
3 1.722 -2.552 -0.517
4 -0.258 1.810 1.332
5 0.362 -1.215 0.768
6 0.949 -0.384 -0.802
7 0.782 -1.140 -2.217
8 -0.410 0.882 -0.366
9 0.240 0.632 -1.374

In [3]: def standardize(x):
...: y = x - x.mean()
...: sd = x.std()
...: return y / sd
...:

In [4]: df.apply(standardize)
Out[4]:
0 1 2
0 2.074 -0.773 0.384
1 -1.234 -0.490 0.263
2 0.286 -0.085 1.047
3 1.009 -1.555 -0.300
4 -0.862 1.801 1.385
5 -0.276 -0.526 0.871
6 0.279 0.113 -0.559
7 0.121 -0.468 -1.848
8 -1.005 1.087 -0.162
9 -0.391 0.895 -1.081

In [5]: df.apply(standardize).mean()
Out[5]:
0 8.327e-17
1 2.220e-17
2 2.220e-17
dtype: float64

In [6]: df.apply(standardize).std()
Out[6]:
0 1
1 1
2 1
dtype: float64

默认情况下,它将函数应用于列,但通过传递 axis=1 您可以将函数应用于每一行:

In [8]: df.apply(standardize, axis=1).mean(1)
Out[8]:
0 -1.850e-17
1 7.401e-17
2 -3.701e-17
3 -2.544e-17
4 9.252e-17
5 3.701e-17
6 -3.701e-17
7 -1.110e-16
8 -3.701e-17
9 0.000e+00
dtype: float64

对于x if x else y类型的计算,使用DataFrame.where():

In [16]: df = DataFrame(randint(6, size=(10, 3)))

In [17]: df
Out[17]:
0 1 2
0 2 1 4
1 2 4 0
2 4 4 4
3 4 3 2
4 2 4 3
5 1 1 3
6 2 0 2
7 1 4 4
8 2 4 5
9 2 1 2

In [19]: df.where(df, nan)
Out[19]:
0 1 2
0 2 1 4
1 2 4 NaN
2 4 4 4
3 4 3 2
4 2 4 3
5 1 1 3
6 2 NaN 2
7 1 4 4
8 2 4 5
9 2 1 2

关于python pandas .map 双变量 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19126612/

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