python - 从现有行生成新的 Dataframe 列
问题描述
我正在研究一些篮球数据,其中我有一些看起来像的数据框(仅适用于一个团队......婴儿步骤)
df = pd.DataFrame({'PlayId':[1,1,1,1,1],'Player':['A','B','C','D','E'],'Ball':[0,0,1,0,0],'Pos':[1, 4, 10, 15, 20 ],'Speed':[1,2,3,4,5]})
我为距 Ball=1 的距离创建一个列(推广到许多 PlayId):
df['DistanceToBall'] = np.abs(df.Pos-df.Pos[df.groupby('PlayId')['Ball'].transform('idxmax')].reset_index(drop=True))
接下来我想把它变成包含 Ball = 1 信息的单行
newdf = df.loc[df.Ball==1,:]
现在我想添加有关基于 DistanceToBall 的 Pos 和 Speed 信息的列。我的新列将是最接近的 1、最接近的 2、最接近的 3、最接近的 4,它们将具有它们的位置值,因此按顺序排列(15、4、1、20)。我不确定如何做到这一点,尤其是在我有许多不同的“PlayId”的情况下。
编辑:预期输出:
PlayId Player Ball Pos Speed DistanceToBall closest1 closest2 closest3 closest4 speed1 speed2 speed3 speed4
2 1 C 1 10 3 0 15 4 1 20 4 2 1 5
解决方案
这将附加到newdf
最近的 4 个玩家Pos
,按以下顺序排序DistanceToBall
:
for i in range(4):
newdf.loc[:, 'closest{}'.format(i+1)] = \
df.sort_values(by='DistanceToBall')['Pos'].values[i]
for i in range(4):
newdf.loc[:, 'speed{}'.format(i + 1)] = \
df.sort_values(by='DistanceToBall')['Speed'].values[i]
Out[22]:
PlayId Player Ball Pos Speed ... closest4 speed1 speed2 speed3 speed4
2 1 C 1 10 3 ... 1.0 3.0 4.0 2.0 1.0
推荐阅读
- oracle - 如何使用 Oracle .Net 实体框架查询准备 WITH CLAUSE
- i3 - Firefox windows 与 i3status 栏重叠,如何解决?
- c# - 如何从不同的类访问 cudafied 方法?
- asp.net - 带有 asp dalalist 的 Bootstrap 投资组合项目
- laravel-5 - 如何进行查询以使用 Laravel 5 中的数据透视表和另一个表进行过滤?
- python - 一起使用 Pandas 和 xlrd。忽略列标题的缺失/存在
- dart - Flutter:字符串编码不正确-flutter中的toString将“转换为â
- android - exifinterface 27.1.0 , animated-vector-drawable:27.1.1 , 所有 com.android.support 库必须使用完全相同的版本
- c - Flex - Yacc:未定义对“YY_CURRENT_BUFFER”的引用
- maven - Maven 发布:缺少开发者信息