python - 在熊猫数据框中为条件赋值?
问题描述
我有一个熊猫数据框,如下所示
df
time case1 case2 case3
0 5 house bank atm
1 3 bank house pharmacy
2 10 bank bank atm
3 20 house pharmacy house
我想为每个案例添加一个对应于给定类别的平均值和标准偏差的列。
我知道
p_house = [20, 10]
p_bank = [5, 1]
p_atm = [3, 1]
p_pharmacy = [10, 5]
我想要一个像下面这样的熊猫数据框
df
time case1 case2 case3 p1 p2 p3
0 5 house bank atm [20, 10] [5, 1] [3, 1]
1 3 bank house pharmacy [5, 1] [20, 10] [10, 5]
2 10 bank bank atm [5, 1] [5, 1] [3, 1]
3 15 house pharmacy house [20, 10][10, 5] [20, 10]
解决方案
IIUC,您可以使用字典然后使用stack
,map
然后沿着时间索引重新加入。
map_dict = { 'house' : [20, 10]
, 'bank' : [5, 1]
, 'atm' : [3, 1]
, 'pharmacy' : [10, 5] }
df1 = df.set_index('time').join(df.set_index("time").stack().map(map_dict).unstack()\
.rename(
columns=lambda x: x.replace("case", "p")
),how='outer')
case1 case2 case3 p1 p2 p3
time
5 house bank atm [20, 10] [5, 1] [3, 1]
3 bank house pharmacy [5, 1] [20, 10] [10, 5]
10 bank bank atm [5, 1] [5, 1] [3, 1]
20 house pharmacy house [20, 10] [10, 5] [20, 10]
推荐阅读
- python - Python从图像中消除颜色
- postgresql - 如何在 docker-compose 处理的 postgres docker 容器中运行 psql 命令?
- c# - DataProtection 兼容性网络框架和网络核心无效负载异常
- java - 底部导航,切换位置后暂时出屏
- maven - 是否可以本地化 Maven artefactID?
- mysql - 使用参考日期和设置的时间段按自定义时间段范围对数据进行分组
- c# - 当列表中有列表时如何使用 linq 仅选择 Id
- angular - 即使我在 app.module.ts 的 @NgModule 中输入了 Angular 2 路由抛出错误
- wordpress - 在 wordpress 中播放文件 mp3 并阻止用户下载(仅可播放)
- python - 从 django 管理页面中排除重复项