python - 根据其他列的值在熊猫中创建一个新列?
问题描述
df_s['makes'] = df_s['result']
df_s['misses'] = df_s['result']
df_s.loc[(df_s['team'] == 'BOS') & (df_s['shot_distance'] >= 23) &(df_s['result'] == 'made'), 'makes'] = 1
df_s.loc[(df_s['team'] != 'BOS') | (df_s['shot_distance'] < 23) | (df_s['result'] == 'missed') | (df_s['makes'] == 'made'), 'makes'] = 0
df_s.fillna(0, inplace=True)
df_s.loc[(df_s['team'] == 'BOS') & (df_s['shot_distance'] >= 23) & (df_s['result'] == 'missed'), 'misses'] = 1
df_s.loc[(df_s['team'] != 'BOS') | (df_s['shot_distance'] < 23) | (df_s['result'] == 'made'), 'misses'] = 0
df_s.fillna(0, inplace=True)
以下是更好的方法,还是有更简单的解决方案?:
>>> df['filter'] = (df['a'] >= 20) & (df['b'] >= 20)
a b c filter
0 1 50 1 False
1 10 60 30 False
2 20 55 1 True
3 3 0 0 False
4 10 0 0 False
解决方案
一种更易读的方法是创建掩码
mask1 = df_s['team'] == 'BOS'
mask2 = df_s['shot_distance'] >= 23
mask3 = df_s['result'] == 'made'
df_s.loc[(mask1 & mask2 & mask3), 'makes'] = 1
df_s.loc[(~mask1 | ~mask2 | ~mask3), 'makes'] = 0
df_s.fillna(0, inplace=True)
推荐阅读
- apache-spark - 将 pyspark 数据框写入文本而不更改其结构
- json - JSON 集合问题
- powershell - 使用范围打印字母等级的powershell函数
- windows - Windows下libusb如何通过hotplug检测USB设备?
- windows - 部署 GTK 应用程序的问题
- ansible - 无法执行服务重启,在ansible中从非root用户复制文件
- javascript - 粘贴到没有特殊字符的文本区域
- java - wrap_content 如何与编辑文本视图一起使用?
- java - Firestore 不查询第二个集合
- c# - 将十进制转换为十六进制