大Pandas人工合成cols的三种方法是什么?

2024-06-13 09:08:59 发布

您现在位置:Python中文网/ 问答频道 /正文

使用以下示例数据:

df = pd.DataFrame({'a': {0: 6, 1: 4, 2: 5, 3: 4, 4: 2},
                   'b': {0: 1, 1: -1, 2: 2, 3: -1, 4: -1},
                   'c': {0: 4, 1: 3, 2: 3, 3: 2, 4: 4}})

我使用这3个表单中的一个来创建一个新列:

我们在轴上使用应用=1时执行:

df['ts'] = df.apply(lambda x: 'XS' if x.a * x.b - x.c > 1 else 'L', axis=1)

或者使用pandasloc查询API(过去常说慢一点):

df.loc[:, 'ts2'] = 'L'
df.loc[df.a * df.b - df.c > 1, 'ts2'] = 'XL'

否则np.哪里::

df['ts3'] = np.where(df.a * df.b - df.c > 1, 'XS', 'L')

这三种方法都很有效:

df
#    a  b  c  ts ts2 ts3
# 0  6  1  4  XS  XL  XS
# 1  4 -1  3   L   L   L
# 2  5  2  3  XS  XL  XS
# 3  4 -1  2   L   L   L
# 4  2 -1  4   L   L   L

奇怪的是,新的pandas.v16assign为此引发了一个错误:

df.assign(ts4=lambda x: 'XS' if x.a * x.b - x.c > 1 else 'L')
...
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我的感觉是,如果我们不能使用这样的结构,assign方法就会失去很多兴趣。你知道吗


Tags: 数据方法lambda示例dfifnpelse