Ren*_*ene 5 python lambda dataframe assign pandas
设置数据框:
import pandas as pd
import numpy as np
np.random.seed(99)
rows = 10
df = pd.DataFrame ({'A' : np.random.choice(range(0, 2), rows, replace = True),
'B' : np.random.choice(range(0, 2), rows, replace = True)})
df
A B
0 1 1
1 1 1
2 1 0
3 0 1
4 1 1
5 0 1
6 0 1
7 0 0
8 1 1
9 0 1
Run Code Online (Sandbox Code Playgroud)
我想添加一列“C”,其值“X”为 df.A 和 df.B 均为 0,其他值为“Y”。
我试过:
df.assign(C = lambda row: 'X' if row.A + row.B == 0 else 'Y')
Run Code Online (Sandbox Code Playgroud)
但这不起作用......
我找到了其他方法来获取结果,但想.assign在这种情况下使用 lambda 函数。
关于如何使用 lambda 进行分配有什么建议吗?
lambda您可以将其矢量化:
import numpy as np
df['C'] = np.where(df['A'] + df['B'] == 0, 'X', 'Y')
Run Code Online (Sandbox Code Playgroud)
该lambda解决方案在这里没有任何好处,但如果你想要它......
df = df.assign(C=np.where(df.pipe(lambda x: x['A'] + x['B'] == 0), 'X', 'Y'))
Run Code Online (Sandbox Code Playgroud)
使用+的错误方法:assignlambda
df = df.assign(C=df.apply(lambda x: 'X' if x.A + x.B == 0 else 'Y', axis=1))
Run Code Online (Sandbox Code Playgroud)
糟糕的方法的问题在于你在 Python 级别的循环中迭代行。它通常比常规的 Python循环更糟糕for。
前两种解决方案在连续内存块上执行矢量化操作,因此处理效率更高。