pandas - 熊猫数据框适用于多列
问题描述
我正在尝试对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)
解决方案
可以使用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)
推荐阅读
- python - 尝试从终端运行 Python 脚本
- javascript - 如果选中单选按钮,有没有办法禁用具有不同名称和 id 的复选框?
- mysql - Mysql:减少列类型 Blob 中数据的长度/大小
- django - DRF: Do DRF serializers, SerializerMethodField 有执行顺序
- c - 在c中使用字符串
- javascript - ReactNative Firestore 多个位置和比较结果
- python - python中比较运算符的语法简写
- javascript - 当我尝试点击视频播放 HTML/CSS 时,视频模式不断关闭
- reactjs - 使用完整呈现的 DOM Leaflet 地图测试事件处理程序
- regex - How do I append text to the line containing a substitution in Perl?