pandas - pandas 获得 np.where 的一列或另一列替代
问题描述
想象一下我有一个这样的数据框
exDF=pd.DataFrame({'choice':['left','right','left','left','right'],'LeftDoor':['l1','l2','l3','l4','l5'],'RightDoor':['r1','r2','r3','r4','r5']})
choice LeftDoor RightDoor
0 left l1 r1
1 right l2 r2
2 left l3 r3
3 left l4 r4
4 right l5 r5
我想尽可能有效地获得做出的选择,例如来自 LeftDoor 或 RightDoor 的值。
例如,我试过
chosen=np.where(exDF['choice']=='left',exDF['LeftDoor'],exDF['RightDoor'])
not_chosen=np.where(exDF['choice']=='left',exDF['RightDoor'],exDF['LefttDoor'])
但这似乎非常低效,实际上需要很长时间才能使用大数据框
另一种选择可能是
chosenLeft=exDF['choice']=='left'
chosenRight=exDF['choice']=='Right'
但是然后我如何将这两者组合成一个列出“选择”的列。不同的索引不符合pd.concat()
基本上我想用 2 列出来
chosen:[l1,r2,l3,l4,r5]
not_chosen:[r1,L2,r3,r4,l5]
我可能过于复杂了,谢谢你的帮助。
解决方案
我认为np.where
这里最快:
#500k rows
exDF = pd.concat([exDF] * 100000, ignore_index=True)
In [55]: %%timeit
...: m = exDF['choice']=='left'
...: chosen=np.where(m,exDF['LeftDoor'],exDF['RightDoor'])
...: not_chosen=np.where(m,exDF['RightDoor'],exDF['LeftDoor'])
...:
32.4 ms ± 216 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [56]: %%timeit
...: m = exDF['choice']=='left'
...: chosen=exDF['LeftDoor'].where(m,exDF['RightDoor'])
...: not_chosen=exDF['RightDoor'].where(m,exDF['LeftDoor'])
...:
55.8 ms ± 223 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
推荐阅读
- c++ - 类型特征以检查类型是否可从流和 MSVC 中读取
- monitoring - Grafana Elsatisearch Graylog (帮助)
- c# - 使用 C# 和 ASP.NET 从 Excel 读取单个单元格到字符串
- reactjs - 如何在 React-Native 组件的警报中显示 {state}
- java - 内容应用程序对话框中具有动态值的静态字段
- javascript - 如何将nodejs使用的api中的数据返回到前端?
- vba - VBA 随机数以固定间隔产生重复序列
- apache - .htaccess 在域文件夹中未正确重定向
- ios - 启动应用程序时如何获取当前滑块宽度 - Swift/Xcode
- python - Python 在两个 gif 图像上应用 logical_xor 函数返回错误 ValueError: image has wrong mode