首页 > 解决方案 > 熊猫数据框适用于多列

问题描述

我正在尝试对apply我的 DataFrame 使用函数。应用使用一个自定义函数,该函数返回 2 个值,并且需要在我的 DataFrame 上填充 2 列的行。

我在下面举了一个简单的例子:

df = DataFrame ({'a' : 10})

我希望创建两列:b 和 c。如果 a 大于 0,b 等于 1。如果 a 大于 0,c 等于 1。

def compute_b_c(a):
   if a > 0:
      return 1, 1
   else:
      return 0,0

我试过了,但它返回关键错误:

df[['b', 'c']] = df.a.apply(compute_b_c)

标签: pandasdataframe

解决方案


可以使用DataFrame构造函数,也1,1可以0,0像元组(1,1)(0,0)

df = pd.DataFrame ({'a' : [10, -1, 9]})

def compute_b_c(a):
   if a > 0:
      return (1,1)
   else:
      return (0,0)

df[['b', 'c']] = pd.DataFrame(df.a.apply(compute_b_c).tolist())
print (df)
    a  b  c
0  10  1  1
1  -1  0  0
2   9  1  1

性能

#10k rows
df = pd.DataFrame ({'a' : [10, -1, 9] * 10000})

In [79]: %timeit df[['b', 'c']] = pd.DataFrame(df.a.apply(compute_b_c).tolist())
22.6 ms ± 285 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [80]: %timeit df[['b', 'c']] = df.apply(lambda row: compute_b_c(row['a']), result_type='expand', axis=1)
5.25 s ± 84.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

推荐阅读