是什么带来了大熊猫合成大麻的3种方法?

时间:2015-05-20 13:34:28

标签: python pandas dataframe

使用此示例数据::

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)

或者使用pandas loc查询API (过去常说较慢)::

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

或者if else np.where ::

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.v16 分配会为此引发错误::

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方法会失去很多兴趣。

0 个答案:

没有答案